uni-app Facebook登录问题:manifest配置好后,Ios正常使用登录成功,但安卓端无facebook provider,导致uni.login报错

uni-app Facebook登录问题:manifest配置好后,Ios正常使用登录成功,但安卓端无facebook provider,导致uni.login报错

项目信息 详细信息
产品分类 uniapp/App
PC开发环境 Windows
PC开发环境版本号 11
HBuilderX类型 正式
HBuilderX版本号 3.99
手机系统 Android
手机系统版本号 Android 13
手机厂商 realme
手机机型 realme GT2
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

示例代码:

uni.login({  
    provider: 'facebook',  
    success: function (loginRes) {  
        // 登录成功  
        uni.getUserInfo({  
            provider: 'facebook',  
            success: function(info) {  
                // 获取用户信息成功, info.authResult保存用户信息  
            }  
        })  
    },  
    fail: function (err) {  
        // 登录授权失败  
        // err.code是错误码  
    }  
});

安卓端提示 login:fail provider not find

操作步骤:

uni.getProvider({  
    service: 'oauth',  
    success: function (res) {  
        console.log(res.provider)  
    }  
});

manifest 文件已经勾选了 Facebook 登录,但是打印结果中没有 facebook 所以 uni.login 直接报错

预期结果:

文档: 配置并打包后,通过 uni.getProvider 可以得到配置的结果列表,注意这里返回的是 manifest 配置的,与手机端是否安装微信、QQ、微博无关。

实际结果:

manifest 文件已经勾选了 Facebook 登录,但是打印结果中没有 facebook 所以 uni.login 直接报错

bug描述:

faceBook 登录:

  • ios 端:可以正常使用
  • 安卓端无法唤起facebook登录,自定义基座提示 login:fail provider not find
  • 如果使用标准基座,依然没有 facebook 信息
plus.oauth.getServices(function(services) {  
    console.log(services)  
}, function(err) {  
    // 获取 services 失败  
})  

// 打印结果如下  
[  
    {  
        "id": "univerify",  
        "description": "一键登录",  
        "nativeClient": true,  
        "authResult": null,  
        "userInfo": null  
    },  
    {  
        "id": "weixin",  
        "description": "微信",  
        "nativeClient": false,  
        "authResult": null,  
        "userInfo": null  
    },  
    {  
        "id": "qq",  
        "description": "QQ",  
        "nativeClient": true,  
        "authResult": null,  
        "userInfo": null  
    },  
    {  
        "id": "sinaweibo",  
        "description": "新浪微博",  
        "nativeClient": false,  
        "authResult": null,  
        "userInfo": null  
    },  
    {  
        "id": "google",  
        "description": "Google",  
        "nativeClient": true,  
        "authResult": null,  
        "userInfo": null  
    }  
]

Facebook 登录都是勾选、配置好了的,而且 ios 端没有问题


更多关于uni-app Facebook登录问题:manifest配置好后,Ios正常使用登录成功,但安卓端无facebook provider,导致uni.login报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

我也是 您那个facebook 如何开启"public_profile"以及"email"的访问权限 我这个公司验证一直不通过

更多关于uni-app Facebook登录问题:manifest配置好后,Ios正常使用登录成功,但安卓端无facebook provider,导致uni.login报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html


我们这个项目很早就配置好了,我还没要到公司开发者账号。昨天才发现 facebook 登录点击没有反应,安卓 两种基座都是点击就提示 login:fail provider not find 。安卓端才跑到 uni.login 这就报错了

我打的自定义基座 然后用的模拟器 下载了facebook app 但是提示

已解决,目前标准基座无法体验 Facebook 登录 自定义基座 manifest 文件 facebook 登录之前可以不配置 client_token,文档示例图也只配置了appid , 现在把 client_token 配置后可以唤起 facebook 登录

IOS 无法调起 uni.getUserInfo({ provider: ‘facebook’, success: function(info) { // 获取用户信息成功, info.authResult保存用户信息 } })
安卓正常、头像和名字均可获取,IOS则无任何反应

在 uni-app 中,如果你已经配置好了 manifest.json 文件,并且 iOS 端可以正常使用 Facebook 登录,但 Android 端无法找到 Facebook 的 provider,导致 uni.login 报错,可能是以下原因导致的:

1. 检查 manifest.json 配置

确保在 manifest.json 文件中,Android 平台的 Facebook 登录配置正确。以下是一个示例配置:

{
  "app-plus": {
    "distribute": {
      "android": {
        "oauth": {
          "facebook": {
            "appid": "你的Facebook App ID",
            "appkey": "你的Facebook App Key"
          }
        }
      },
      "ios": {
        "oauth": {
          "facebook": {
            "appid": "你的Facebook App ID",
            "appkey": "你的Facebook App Key"
          }
        }
      }
    }
  }
}

确保 appidappkey 正确填写,并且与 Facebook 开发者平台上的配置一致。

2. 检查 Facebook SDK 配置

在 Facebook 开发者平台上,确保你已经为 Android 应用配置了正确的包名和签名密钥哈希(Key Hash)。如果这些信息不正确,Facebook SDK 将无法正常工作。

  • 包名:确保与 manifest.json 中的 id 字段一致。

  • Key Hash:可以通过以下命令生成并上传到 Facebook 开发者平台:

    keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
    

    输入密码 android,然后将生成的 Key Hash 上传到 Facebook 开发者平台。

3. 检查 Android 项目配置

确保在 Android 项目中,AndroidManifest.xml 文件中有正确的 Facebook 登录配置。通常,uni-app 会自动生成这些配置,但你可以手动检查一下:

<application>
  <meta-data
    android:name="com.facebook.sdk.ApplicationId"
    android:value="@string/facebook_app_id" />
  <activity
    android:name="com.facebook.FacebookActivity"
    android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
    android:label="@string/app_name" />
  <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="@string/fb_login_protocol_scheme" />
    </intent-filter>
  </activity>
</application>

4. 检查 uni.login 调用

确保在调用 uni.login 时,正确指定了 provider"facebook"

uni.login({
  provider: 'facebook',
  success: function (loginRes) {
    console.log('登录成功:', loginRes);
  },
  fail: function (err) {
    console.log('登录失败:', err);
  }
});

5. 检查 uni-app 版本

确保你使用的是最新版本的 uni-app,因为旧版本可能存在一些兼容性问题。可以通过以下命令更新 uni-app:

npm update @dcloudio/uni-app

6. 调试和日志

如果以上步骤都正确,但仍然无法解决问题,可以尝试在 Android 设备上调试,查看日志输出,以获取更多错误信息。你可以使用 adb logcat 命令来查看日志。

7. 重新编译项目

有时候,修改 manifest.json 后,需要重新编译项目才能生效。尝试删除 unpackage 目录,然后重新编译项目:

rm -rf unpackage
npm run dev:mp-weixin

8. 检查 Facebook SDK 版本

确保你使用的 Facebook SDK 版本与 uni-app 兼容。可以在 build.gradle 中检查 Facebook SDK 的版本:

implementation 'com.facebook.android:facebook-android-sdk:latest.release'
回到顶部