更新记录
1.0.0(2026-04-09)
支持 安卓与iOS平台的ins授权登录与分享
平台兼容性
uni-app(4.86)
| Vue2 | Vue2插件版本 | Vue3 | Vue3插件版本 | Chrome | Safari | app-vue | app-vue插件版本 | app-nvue | app-nvue插件版本 | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | 1.0.0 | √ | 1.0.0 | × | × | √ | 1.0.0 | √ | 1.0.0 | 5.0 | 1.0.0 | 12 | 1.0.0 | × |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| × | × | × | × | × | × | × | × | × | × | × | × |
uni-app x(4.86)
| Chrome | Safari | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|---|---|
| × | × | 5.0 | 1.0.0 | 12 | 1.0.0 | × | × |
tt-instagram-opensdk
🚀 Instagram 登录与分享插件,为 uni-app x 与 uni-app 提供 Instagram 授权登录、分享到动态(Feed)、分享到快拍(Stories)能力。
📖 目录
SDK版本信息
| 平台 | 实现方式 | 支持状态 |
|---|---|---|
| iOS | 系统浏览器 OAuth + 文档交互 / URL Scheme 分享 | ✅ 支持 |
| Android | 系统浏览器 OAuth + 隐式 Intent 分享 | ✅ 支持 |
| HarmonyOS(鸿蒙) | 未提供 app-harmony 实现 |
❌ 当前版本不支持 |
功能支持矩阵
| 功能 | iOS | Android |
|---|---|---|
Instagram 登录 login |
✅ | ✅ |
分享到动态 shareToFeed(图片 / 视频) |
✅ | ✅ |
分享到快拍 shareToStory(背景图 / 背景视频,可选贴图) |
✅ | ✅ |
📚 推荐阅读:Instagram 开放平台 - 分享到动态 · 分享到快拍
🚨 重要提示
⚠️ 必须使用自定义基座运行,否则无法找到插件原生方法(与微博、飞书等 UTS 插件一致)。
⚠️ 登录必须配置正确的回调地址:redirectUrl 须与 Instagram / Meta 开发者后台登记的 Redirect URI 一致,且宿主应用能接收该 Scheme 或 Universal Link。
⚠️ 分享成功回调表示「已成功拉起 Instagram 客户端」,不代表用户已在 Instagram 内完成发布。
⚠️ 快拍分享须传入 sourceApplication(Facebook App ID),与官方文档要求一致;未配置时 Instagram 可能提示不支持分享到快拍。
⚠️ 素材路径:imagePath / videoPath 等须为应用可读的本地路径(与 UTSiOS.convert2AbsFullPath / UTSAndroid.convert2AbsFullPath 规则一致)。
环境配置
前置条件
- 在 Meta / Instagram 开发者平台 创建应用并完成 Instagram 相关配置。
- 获取 Instagram 应用 App ID(用于
login的appId)。 - 快拍分享需获取 Facebook App ID(用于
shareToStory的sourceApplication)。 - 在后台配置 OAuth 重定向 URI,与代码中
login的redirectUrl完全一致(常见形式:ig{你的InstagramAppId}://authorize,具体以你后台登记为准)。
iOS 平台配置
1. 插件内 config.json(已内置)
uni_modules/tt-instagram-opensdk/utssdk/app-ios/config.json 中已配置:
LSApplicationQueriesSchemes:instagram、instagram-stories
使用自定义基座或云打包时,会与主应用合并;若需增删 Scheme,直接编辑该文件即可。
2. 登录回调 URL Scheme
须在宿主应用(或 uni-app 打包配置)中注册与 redirectUrl 一致的 URL Types,例如 ig{clientId}://authorize 形式,以便授权完成后回到你的 App。
插件通过 TTInstagramSDKHookProxy 处理 openURL 与 Universal Link(continueUserActivity);请确保工程未屏蔽相关生命周期。
Android 平台配置
1. 登录 Deep Link
授权完成后浏览器会跳转到你的 redirectUrl。须在宿主 AndroidManifest.xml 的入口 Activity(如 MainActivity)上配置对应 intent-filter(VIEW + BROWSABLE + 与 redirectUrl 匹配的 scheme / host),否则可能收不到 token。
2. 本地文件与 FileProvider
分享到动态 / 快拍使用本地文件 URI 时,需保证宿主已正确配置 FileProvider(与 uni-app 默认模板一致即可),否则 EXTRA_STREAM / Story Intent 可能无法被 Instagram 读取。
快速开始
1. 导入插件
import * as instagram from "@/uni_modules/tt-instagram-opensdk";
2. 获取 SDK 实例
const ins = instagram.getTTInstagramSDK();
登录参数在每次 login 时传入即可;无单独的 register 或「SDK 初始化」步骤,因此也不会出现「SDK 未初始化」类错误码。
功能介绍
Instagram 授权登录
💡 使用 OAuth implicit(
response_type=token),授权完成后从回调 URL 的 fragment 中解析access_token。请勿在客户端长期存储敏感令牌,建议结合服务端换票或自有安全策略。
双端实现差异(与 app-ios / app-android 源码一致)
| 项目 | iOS | Android |
|---|---|---|
| 打开授权页 | UIApplication.shared.open 打开系统浏览器中的授权 URL |
startActivityForResult + ACTION_VIEW 打开浏览器 |
| 收回授权结果 | TTInstagramSDKHookProxy 处理 openURL / Universal Link,与 redirectUrl 前缀匹配后解析 token |
UTSAndroid.onAppActivityResult 收到返回后从 Intent 或当前 Activity 的 data 读取回调 URI |
| 错误码 201 | 不使用。用户从浏览器返回且未带回有效回调时,不会经插件走到 201 | 使用:ActivityResult 后拿不到回调 Uri(常见为用户未授权就返回)时返回 201(文案为「用户取消登录」) |
参数说明
TTInstagramLoginOptions
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| appId | string | ✅ | Instagram 应用 App ID |
| redirectUrl | string | ✅ | 与开发者后台一致的回调地址 |
| scope | string | ❌ | 权限范围,默认 user_profile |
| success | function | null | ✅ | 登录成功回调(可传 null) |
| fail | function | null | ✅ | 登录失败回调(可传 null) |
| complete | function | null | ✅ | 登录完成回调(可传 null) |
返回值 TTInstagramLoginSuccess
| 参数 | 类型 | 说明 |
|---|---|---|
| accessToken | string | 授权访问令牌(双端均从回调 URL 解析) |
| expiresIn | number | null | Android 成功时显式为 null;iOS 成功对象当前仅设置 accessToken,其余字段依赖类型默认值 |
| userId | string | null | 同上,Android 为 null |
| userName | string | null | 同上,Android 为 null |
示例代码
ins.login({
appId: "您的Instagram应用AppId",
redirectUrl: "ig您的Instagram应用AppId://authorize",
scope: "user_profile",
success: (res) => {
console.log("✅ Instagram 登录成功", res.accessToken);
},
fail: (err) => {
console.error("❌ Instagram 登录失败", err.errCode, err.errMsg);
handleInstagramLoginError(err);
},
complete: () => {
console.log("Instagram 登录流程结束");
}
});
function handleInstagramLoginError(error: any) {
switch (error.errCode) {
case 101:
case 103:
uni.showToast({ title: error.errMsg || "参数错误", icon: "error" });
break;
case 201:
// 仅 Android:未带回回调 URI,多为用户取消
console.log("用户取消或未完整授权", error.errMsg);
break;
case 202:
// errMsg 可能为「无法打开Instagram授权页」「Activity不可用」「授权地址无效」或 OAuth 的 error_description
uni.showToast({ title: error.errMsg || "登录失败", icon: "error" });
break;
case 203:
uni.showToast({ title: error.errMsg || "登录结果解析失败", icon: "error" });
break;
default:
uni.showToast({ title: error.errMsg || "登录失败", icon: "error" });
break;
}
}
分享到动态(Feed)
💡 将本地图片或视频传入 Instagram 编辑页;格式与尺寸需符合 官方 Feed 分享说明。
参数说明
TTInstagramShareToFeedOptions
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| mediaType | "image" | "video" |
✅ | 素材类型 |
| imagePath | string | 条件 | mediaType=image 时必填,本地图片路径 |
| videoPath | string | 条件 | mediaType=video 时必填,本地视频路径 |
| caption | string | ❌ | 文案(可选;各端传递方式以系统能力为准) |
| success | function | ❌ | 成功回调(已拉起 Instagram) |
| fail | function | ❌ | 失败回调 |
| complete | function | ❌ | 完成回调 |
使用示例
// 分享图片到动态
ins.shareToFeed({
mediaType: "image",
imagePath: "/static/logo.png",
caption: "来自 uni-app 的分享",
success: () => {
console.log("✅ 已调起 Instagram(动态)");
},
fail: (err) => {
console.error("❌ 分享失败", err);
uni.showToast({ title: err.errMsg || "分享失败", icon: "error" });
},
complete: () => {}
});
// 分享视频到动态
ins.shareToFeed({
mediaType: "video",
videoPath: "/path/to/video.mp4",
caption: "视频分享",
success: () => {},
fail: (err) => {},
complete: () => {}
});
分享到快拍(Stories)
💡 须提供 Facebook App ID 作为
source_application;背景与贴图规则见 官方 Stories 文档。
参数说明
TTInstagramShareToStoryOptions
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| sourceApplication | string | ✅ | Facebook App ID(对应官方 source_application) |
| backgroundMediaType | "image" | "video" |
✅ | 背景素材类型 |
| backgroundImagePath | string | 条件 | backgroundMediaType=image 时必填 |
| backgroundVideoPath | string | 条件 | backgroundMediaType=video 时必填 |
| stickerImagePath | string | ❌ | 贴图本地路径(可选) |
| backgroundTopColor | string | ❌ | 背景顶部颜色,如 #33FF33 |
| backgroundBottomColor | string | ❌ | 背景底部颜色 |
| success | function | ❌ | 成功回调 |
| fail | function | ❌ | 失败回调 |
| complete | function | ❌ | 完成回调 |
使用示例
// 背景图 + 可选贴图
ins.shareToStory({
sourceApplication: "您的FacebookAppId",
backgroundMediaType: "image",
backgroundImagePath: "/static/bg.png",
stickerImagePath: "/static/sticker.png",
backgroundTopColor: "#33FF33",
backgroundBottomColor: "#FF00FF",
success: () => console.log("✅ 已调起 Instagram(快拍)"),
fail: (err) => console.error("❌ 快拍分享失败", err)
});
// 背景视频
ins.shareToStory({
sourceApplication: "您的FacebookAppId",
backgroundMediaType: "video",
backgroundVideoPath: "/path/to/story.mp4",
success: () => {},
fail: (err) => {}
});
错误处理
以下错误码与 utssdk/unierror.uts 及 app-ios/index.uts、app-android/index.uts 中实际 new TTInstagram*FailImpl(...) 的用法一致;未在代码中出现的码已从码表移除(如历史上的 102 / 104 / 305 / 306 / 999)。
错误码说明
| 错误码 | 默认 errMsg | 触发条件(实现摘要) |
|---|---|---|
| 登录 | ||
| 101 | appId不能为空 | login 时 appId 为空 |
| 103 | redirectUrl不能为空 | login 时 redirectUrl 为空 |
| 201 | 用户取消登录 | 仅 Android:onAppActivityResult 后无法从 Intent/Activity 得到回调 URI(常见为未授权即返回) |
| 202 | 登录失败(可被具体 errMsg 覆盖) | iOS:canOpenURL 无法打开授权页 → 常带「无法打开Instagram授权页」;回调中含 error_description → errMsg 为解码后的描述。Android:当前 Activity 为空、授权 URL 解析失败、或 OAuth 错误描述 |
| 203 | 登录结果解析失败 | 回调 URL 与 redirectUrl 前缀匹配,但无 access_token 且无 error_description;Android 另在回调整体与登记 redirectUrl 前缀不一致时可能带 errMsg「回调地址不匹配」 |
| 分享 | ||
| 105 | Instagram客户端未安装 | 无法通过 canOpenURL / resolveActivity 调起 Instagram(未安装或被系统限制) |
| 106 | sourceApplication不能为空 | 快拍 sourceApplication(Facebook App ID)为空 |
| 301 | 分享参数错误 | 缺背景/动态路径、或快拍内部无有效背景 payload 等参数问题 |
| 302 | 分享失败(可被具体 errMsg 覆盖) | Android:UTSAndroid.getUniActivity() 为空 → 常带「Activity不可用」。iOS:Feed 走 instagram://library 兜底时授权 URL 构造失败 |
| 303 | 图片文件无效 | 图片路径为空、文件不存在或读数据失败 |
| 304 | 视频文件无效 | 视频路径为空、文件不存在或读数据失败 |
TTInstagramLoginFailImpl / TTInstagramShareFailImpl 构造时若传入第二参数 errMsg,以传入文案为准(表中为 Map 内默认文案)。
常见问题
1. 找不到插件方法?
解决方案:使用自定义基座或包含本插件的云打包产物;标准基座不包含 UTS 原生插件。
2. Android 登录无回调?
解决方案:确认 MainActivity(或实际接收深链的 Activity)已配置与 redirectUrl 一致的 intent-filter;授权完成后系统应能把 URI 交给当前 Activity。
3. iOS 登录无回调?
解决方案:检查 URL Scheme 是否与 redirectUrl 一致;确认工程已合并插件 Hook(applicationOpenURL / continueUserActivity)。
4. 快拍提示不支持或失败?
解决方案:确认 sourceApplication 为正确的 Facebook App ID;Instagram 与 Meta 应用后台需完成关联与审核要求(以官方控制台为准)。
5. 分享提示未安装 Instagram?
解决方案:真机安装 Instagram;iOS 需在 LSApplicationQueriesSchemes 中包含 instagram / instagram-stories(插件 config.json 已内置,重新打基座生效)。
参考文档
📞 技术支持
如果在使用过程中遇到问题,请:
- 查阅上方 常见问题 与 错误处理
- 参考 Meta / Instagram 开放平台 官方文档(OAuth、分享到动态 / 快拍等)
- 核对开发者后台配置:
appId、redirectUrl与登记的 Redirect URI 一致;iOS URL Types / Androidintent-filter与redirectUrl一致;快拍场景的 Facebook App ID 与后台关联无误 - 在真机上确认已安装 Instagram 客户端,并尽量使用较新版本
祝您开发愉快! 🎉

收藏人数:
购买源码授权版(
试用
使用 HBuilderX 导入示例项目
赞赏(1)
下载 647
赞赏 4
下载 11517459
赞赏 1903
赞赏
京公网安备:11010802035340号