繁体   English   中英

来自`expo-facebook`的Facebook.logInWithReadPermissionsAsync在Android上失败,出现错误`尝试登录Facebook时出错`

[英]Facebook.logInWithReadPermissionsAsync from `expo-facebook` fails on Android with error `An error occurred while trying to log in to Facebook`

我有一个 redux thunk 操作,用于在我正在处理的应用程序中使用 Facebook 登录。 动作如下所示:

export const loginFB = createAsyncThunk('loginFB', async (_, thunkApi) => {
  await Facebook.initializeAsync({ appId: 'aaa', appName: 'bbb' });
  const FBResponse = await Facebook.logInWithReadPermissionsAsync({ permissions: ['public_profile'] });
  if (FBResponse.type === 'success') {
    // Login in backend. Not really relevant 
  }
});

这在 iOS 上完美运行,并且在 Android 上运行良好很长一段时间(我认为从 2021 年 9 月开始)。 我不知道它是什么时候发生的,但它最近停止在 Android 上工作。 我收到的错误消息如下所示:

An error occurred while trying to log in to Facebook
at node_modules/react-native/Libraries/BatchedBridge/NativeModules.js:104:50 in promiseMethodWrapper
at node_modules/expo-modules-core/build/NativeModulesProxy.native.js:27:27 in moduleName.methodInfo.name
at node_modules/expo-facebook/build/Facebook.js:69:36 in logInWithReadPermissionsAsync
at node_modules/expo-facebook/build/Facebook.js:64:7 in logInWithReadPermissionsAsync
at src/screens/LoginScreen.tsx:151:41 in FacebookButton.props.onPress
- ... 16 more stack frames from framework internals

如果 Facebook 应用程序安装在 Android 设备上,则 Facebook 加载模式会在消失之前短暂出现。 如果未安装,则会弹出此消息: Facebook 错误截图

我已按照文档中的每一步操作,并从用于签署应用程序的 Play 管理中心添加了Upload key certificateApp signing key certificate的哈希值。 Facebook开发者Android平台配置如下: Facebook开发者截图

除了app.json的这个添加之外,该代码自工作以来一直没有被触及:

{
  "expo": {
    ...
    "plugins": [
      [
        "expo-facebook",
        {
          "userTrackingPermission": false
        }
      ]
    ],
    ...
  }
}

我尝试删除此添加,但发生相同的错误。

使用 Expo 44.0.5和 expo-facebook 版本12.1.0

我真的不知道如何解决这个问题了,请帮助

我也有同样的问题,谁能帮忙?

我在使用与您使用的完全相同的版本时遇到了同样的问题。

我修复它 atm 的方法是更改 Android 的行为,所以当我初始化Facebook.initializeAsync而不是传递 object 时,我只是发送appId参数。

所以它看起来像这样:

    let options = null;
    if (Platform.OS === 'android') {
      options = '<APP_ID>';
    }
    else {
      options = {
        appId: '<APP_ID>',
        version: 'v9.0',
        appName: '<APP_NAME>',
      };
    }

    await Facebook.initializeAsync(options);

希望这也适用于你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM