更新记录

1.0.1(2025-11-03)

修复已知问题

1.0.0(2025-11-01)

支持Android、iOS平台授权登录


平台兼容性

uni-app(4.36)

Vue2 Vue2插件版本 Vue3 Vue2插件版本 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 13 1.0.0 ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × ×

uni-app x(4.36)

Chrome Safari Android Android插件版本 iOS iOS插件版本 鸿蒙 微信小程序
× × 5.0 1.0.0 13 1.0.0 × ×

tt-meta-sdk

🚀 专业版 Meta SDK 插件,为 uni-app x & uni-app 提供完整的 Facebook 集成解决方案,包含授权登录等功能

📖 目录

SDK版本信息

平台 版本 支持状态
iOS 17.0.2 ✅ 完全支持
Android 18.0.3 ✅ 完全支持

📚 推荐阅读:

🚨 重要提示

⚠️ 必须使用自定义基座运行,否则无法找到插件方法
⚠️ 测试前需确保应用已通过 Facebook 开发者平台审核,否则登录可能失败
⚠️ Android: 确保应用签名与 Facebook 开发者平台配置的签名一致
⚠️ 编译报错排查:本插件会定期更新至最新版SDK,某些情况下编译报错可能不是插件不可用,而是本地环境问题或与官方插件冲突,遇到此类情况可通过IM联系我协助解决

环境配置

前置条件

  1. Facebook 开发者平台 创建应用
  2. 获取 App IDClientToken
  3. 配置应用包名和签名

iOS平台配置

1. 配置 Info.plist

无需在项目根目录添加或修改 Info.plist。请直接编辑插件内的 uni_modules/tt-meta-sdk/utssdk/app-ios/Info.plist,将以下配置项补充为您的实际值:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>CFBundleURLTypes</key>
    <array>
      <dict>
        <key>CFBundleURLSchemes</key>
        <array>
          <string>fb+AppID</string>
        </array>
      </dict>
    </array>
    <key>LSApplicationQueriesSchemes</key>
    <array>
      <string>fbapi</string>
      <string>fb-messenger-share-api</string>
    </array>
    <key>FacebookAppID</key>
    <string>APP-ID</string>
    <key>FacebookClientToken</key>
    <string>CLIENT-TOKEN</string>
    <key>FacebookDisplayName</key>
    <string>APP-NAME</string>
  </dict>
</plist>

配置说明:

  • fb+AppID: 将 +AppID 替换为您的实际 Facebook App ID,例如 fb123456789
  • APP-ID: 替换为您的 Facebook App ID
  • CLIENT-TOKEN: 替换为您的 Facebook Client Token
  • APP-NAME: 替换为您的应用名称

Android平台配置

1. 配置 AndroidManifest.xml

无需在项目根目录修改配置。请直接编辑插件内的 uni_modules/tt-meta-sdk/utssdk/app-android/AndroidManifest.xml,将以下配置项补充为您的实际值:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
    package="uts.sdk.modules.ttMetaSDK">
    <uses-permission android:name="android.permission.INTERNET" />
    <queries>
        <provider android:authorities="com.facebook.katana.provider.PlatformProvider" />
    </queries>
    <application>
       <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="此处填写您的FacebookAppId"/>
       <meta-data android:name="com.facebook.sdk.ClientToken" android:value="此处填写您的ClientToken"/>

        <activity android:name="com.facebook.FacebookActivity"
            android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" />
        <activity android:name="com.facebook.CustomTabActivity" android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="fb此处填写您的FacebookAppId" />
            </intent-filter>
        </activity>
    </application>
</manifest>

配置说明:

  • fb此处填写您的FacebookAppId: 替换为 fb + 您的 Facebook App ID,例如 fb123456789
  • 此处填写您的ClientToken: 替换为您的 Facebook Client Token
  • 此处填写您的FacebookAppId: 替换为您的 Facebook App ID(不带 fb 前缀)

快速开始

导入插件

uni-app x 版本

import * as metaSdk from "@/uni_modules/tt-meta-sdk";

export default {
    data() {
        return {
            metaSDK: null as metaSdk.TTMetaSDK | null,
        }
    },
    onLoad() {
        // 初始化Meta SDK实例
        this.metaSDK = metaSdk.getTTMetaSDK()
    },
    methods: {
        // 使用SDK功能
    }
}

uni-app 版本

import * as metaSdk from "@/uni_modules/tt-meta-sdk";

export default {
    data() {
        return {
            metaSDK: metaSdk.TTMetaSDK,
        }
    },
    onLoad() {
        // 初始化Meta SDK实例
        this.metaSDK = metaSdk.getTTMetaSDK()
    },
    methods: {
        // 使用SDK功能
    }
}

授权登录

参数说明

TTMetaLoginOptions

参数 类型 必填 说明
permissions Array 权限列表,如 ["public_profile", "email"]

返回值 TTMetaLoginSuccess

参数 类型 说明
code string 用于换取access_token的授权码
userID string | null 用户ID
name string | null 用户名称
pictureURL string | null 用户头像URL
email string | null 用户邮箱

示例代码

uni-app x 版本

// Facebook 授权登录
handleFacebookLogin() {
    this.metaSDK?.login({
        permissions: ["public_profile", "email"], // 请求权限
        success: (result) => {
            console.log("✅ Facebook 登录成功:", result);
            console.log("授权码:", result.code);
            if (result.userID) {
                console.log("用户ID:", result.userID);
            }
            if (result.name) {
                console.log("用户名:", result.name);
            }
            if (result.email) {
                console.log("邮箱:", result.email);
            }
            if (result.pictureURL) {
                console.log("头像URL:", result.pictureURL);
            }

            // 可以将授权码发送到后端服务器进行进一步处理
            this.sendCodeToServer(result.code)
        },
        fail: (error) => {
            console.error("❌ Facebook 登录失败:", error);
            uni.showToast({
                title: '登录失败',
                icon: 'error'
            })
        },
        complete: (result) => {
            console.log("Facebook 登录完成");
        }
    } as metaSdk.TTMetaLoginOptions)
}

// 发送授权码到后端服务器
sendCodeToServer(code: string) {
    uni.request({
        url: 'https://your-server.com/api/facebook/login',
        method: 'POST',
        data: { code },
        success: (res) => {
            // 处理登录成功逻辑
            console.log('登录成功:', res.data)
        },
        fail: (err) => {
            console.error('登录请求失败:', err)
        }
    })
}

uni-app 版本

// Facebook 授权登录
handleFacebookLogin() {
    this.metaSDK.login({
        permissions: ["public_profile", "email"], // 请求权限
        success: (result) => {
            console.log("✅ Facebook 登录成功:", result);
            console.log("授权码:", result.code);
            if (result.userID) {
                console.log("用户ID:", result.userID);
            }
            if (result.name) {
                console.log("用户名:", result.name);
            }
            if (result.email) {
                console.log("邮箱:", result.email);
            }
            if (result.pictureURL) {
                console.log("头像URL:", result.pictureURL);
            }

            // 可以将授权码发送到后端服务器进行进一步处理
            this.sendCodeToServer(result.code)
        },
        fail: (error) => {
            console.error("❌ Facebook 登录失败:", error);
            uni.showToast({
                title: '登录失败',
                icon: 'error'
            })
        },
        complete: (result) => {
            console.log("Facebook 登录完成");
        }
    })
}

// 发送授权码到后端服务器
sendCodeToServer(code) {
    uni.request({
        url: 'https://your-server.com/api/facebook/login',
        method: 'POST',
        data: { code },
        success: (res) => {
            // 处理登录成功逻辑
            console.log('登录成功:', res.data)
        },
        fail: (err) => {
            console.error('登录请求失败:', err)
        }
    })
}

退出登录

参数说明

TTMetaLogoutOptions

参数 类型 必填 说明
success function 成功回调
fail function 失败回调
complete function 完成回调

示例代码

uni-app x 版本

// Facebook 退出登录
handleFacebookLogout() {
    this.metaSDK?.logout({
        success: () => {
            console.log("✅ Facebook 退出登录成功");
            uni.showToast({
                title: '退出成功',
                icon: 'success'
            })
        },
        fail: (error) => {
            console.error("❌ Facebook 退出登录失败:", error);
            uni.showToast({
                title: '退出失败',
                icon: 'error'
            })
        },
        complete: () => {
            console.log("Facebook 退出登录完成");
        }
    } as metaSdk.TTMetaLogoutOptions)
}

uni-app 版本

// Facebook 退出登录
handleFacebookLogout() {
    this.metaSDK.logout({
        success: () => {
            console.log("✅ Facebook 退出登录成功");
            uni.showToast({
                title: '退出成功',
                icon: 'success'
            })
        },
        fail: (error) => {
            console.error("❌ Facebook 退出登录失败:", error);
            uni.showToast({
                title: '退出失败',
                icon: 'error'
            })
        },
        complete: () => {
            console.log("Facebook 退出登录完成");
        }
    })
}

错误处理

错误码说明

错误码 错误信息 说明
101 取消授权 用户取消了授权操作
102 登录返回异常 登录过程中发生异常
103 用户未登录 用户尚未登录
104 Activity 上下文获取失败 Android 平台无法获取 Activity 上下文
105 访问令牌获取失败 无法获取 Facebook 访问令牌
106 用户信息获取失败 无法获取用户信息
999 其他错误 其他未知错误,请查看原始错误信息
1000 暂不支持 该功能暂不支持

错误处理示例

uni-app x 版本

handleLoginError(error: any) {
    switch (error.errCode) {
        case 101:
            uni.showToast({
                title: '用户取消授权',
                icon: 'none'
            })
            break;
        case 102:
            uni.showToast({
                title: '登录异常,请重试',
                icon: 'error'
            })
            break;
        case 103:
            uni.showToast({
                title: '用户未登录',
                icon: 'none'
            })
            break;
        case 104:
            uni.showToast({
                title: 'Activity 上下文获取失败',
                icon: 'error'
            })
            break;
        case 105:
            uni.showToast({
                title: '访问令牌获取失败',
                icon: 'error'
            })
            break;
        case 106:
            uni.showToast({
                title: '用户信息获取失败',
                icon: 'error'
            })
            break;
        case 999:
            uni.showToast({
                title: `登录失败: ${error.errMsg}`,
                icon: 'error'
            })
            break;
        case 1000:
            uni.showToast({
                title: '该功能暂不支持',
                icon: 'none'
            })
            break;
        default:
            uni.showToast({
                title: '未知错误',
                icon: 'error'
            })
            break;
    }
}

uni-app 版本

handleLoginError(error) {
    switch (error.errCode) {
        case 101:
            uni.showToast({
                title: '用户取消授权',
                icon: 'none'
            })
            break;
        case 102:
            uni.showToast({
                title: '登录异常,请重试',
                icon: 'error'
            })
            break;
        case 103:
            uni.showToast({
                title: '用户未登录',
                icon: 'none'
            })
            break;
        case 999:
            uni.showToast({
                title: `登录失败: ${error.errMsg}`,
                icon: 'error'
            })
            break;
        case 1000:
            uni.showToast({
                title: '该功能暂不支持',
                icon: 'none'
            })
            break;
        default:
            uni.showToast({
                title: '未知错误',
                icon: 'error'
            })
            break;
    }
}

常见问题

Q: 为什么登录失败?

A: 请检查以下几点:

  1. 确保已在 Facebook 开发者平台正确配置应用
  2. 检查 App ID 是否正确配置
  3. 确保应用包名和签名与 Facebook 开发者平台配置一致
  4. 检查网络连接是否正常

Q: 如何获取更多用户信息?

A:

  1. permissions 参数中添加所需权限,如 ["public_profile", "email", "user_friends"]
  2. 通过后端使用获取到的访问令牌调用 Facebook Graph API

Q: 支持哪些权限?

A: 常用权限包括:

  • public_profile: 基本公开信息
  • email: 邮箱地址
  • user_friends: 好友列表
  • user_birthday: 生日信息
  • user_location: 位置信息

更多权限请参考 Facebook 权限文档

Q: 如何处理权限被拒绝的情况?

A:

  1. fail 回调中检查错误信息
  2. 向用户说明权限的必要性
  3. 引导用户重新授权或使用替代方案

Q: 登录后如何保持登录状态?

A:

  1. Facebook SDK 会自动管理登录状态
  2. 应用重启后可以检查当前登录状态
  3. 建议在后端验证访问令牌的有效性

Q: 如何在开发环境中测试?

A:

  1. 在 Facebook 开发者平台添加测试用户
  2. 确保开发环境的包名和签名与配置一致
  3. 使用测试用户账号进行登录测试

Q: 生产环境部署注意事项?

A:

  1. 确保应用已通过 Facebook 审核
  2. 使用生产环境的 App ID 和 App Secret
  3. 配置正确的隐私政策和服务条款链接
  4. 测试所有登录流程和权限请求

📞 技术支持: 如遇到问题,请通过 IM 联系技术支持 📚 更多资源: Facebook 开发者文档


🎉 祝您开发愉快!

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率: