使用 expo 客户端响应本机 facebook 登录:input_token 中的 App_id 与查看应用程序不匹配
Posted
技术标签:
【中文标题】使用 expo 客户端响应本机 facebook 登录:input_token 中的 App_id 与查看应用程序不匹配【英文标题】:react native facebook login using expo client: The App_id in the input_token did not match the Viewing App 【发布时间】:2021-10-08 06:37:11 【问题描述】:我正在使用 expo-facebook 来集成使用 expo 和 firebase 的 Facebook 登录。一切看起来都正常,我登录 Facebook,但是一旦我使用 Facebook 进行身份验证,就会得到 OAuthException,如下所示:
Unsuccessful debug_token response from Facebook: "error":"message":"(#100) The App_id in the input_token did not match the Viewing App","type":"OAuthException","code":100
我在 Stack Overflow、GitHub 上遇到了很多问题,还查看了 expo 文档,但无济于事。 我已根据需要将 Facebook 的应用程序 ID 和机密配置到 Firebase 中,并将 OAuth 重定向 URI 设置为我的 Facebook 应用程序配置。我为设置登录而编写的代码如下:
const signInWithFacebook = async () =>
try
// const type, token = await Facebook.logInWithReadPermissionsAsync(
// facebookAppId,
//
// permissions: ["public_profile"],
//
// );
const appId = Constants.manifest.extra.facebook.appId;
const permissions = ["public_profile"]; // Permissions required, consult Facebook docs
await Facebook.initializeAsync(
appId: appId,
);
const type, token = await Facebook.logInWithReadPermissionsAsync(
permissions: permissions,
);
console.log(type);
console.log(token);
if (type === "success")
await firebase
.auth()
.setPersistence(firebase.auth.Auth.Persistence.LOCAL);
const credential = firebase.auth.FacebookAuthProvider.credential(token);
const facebookProfileData = await firebase
.auth()
.signInWithCredential(credential);
//this.onLoginSuccess.bind(this);
console.log(facebookProfileData);
catch ( message )
console.log(message);
alert(`Facebook Login Error: $message`);
;
我还在app.json中设置了相关配置如下:
"expo":
"facebookScheme": "fb123243435566",
"facebookAppId": "123243435566",
"facebookDisplayName": "myapp"
我不确定的唯一方面是在哪里获取 facebookScheme。目前我假设它是 fb+AppID。这里提到的文档https://docs.expo.dev/versions/latest/sdk/facebook/ 不清楚。它指出:
配置 app.json。 将字段 facebookScheme 添加到您的 Facebook 登录重定向 URL 方案,在“4.配置您的 info.plist”下找到。它应该看起来像“fb123456”。如果您不这样做,Facebook 将无法在登录后重定向到您的应用。
但我不确定如何获取该 facebookScheme id。我怀疑这就是世博会所说的问题所在。Android Play 商店中的 Expo Go 将使用您提供的 Facebook 应用 ID,但是,世博会中的所有 Facebook API 调用都来自 iOS 应用商店将使用 Expo 自己的 Facebook App ID。这是由于基础配置限制造成的。 所以我假设 facebookScheme 是某种解决方法。
虽然我不确定它是否适用于 ios 独立应用程序或管理的 expo。
【问题讨论】:
【参考方案1】:试试这个:
const type, token = await Expo.Facebook.logInWithReadPermissionsAsync(appId,
permissions: [‘public_profile’, ‘email’],
behavior: Platform.OS === ‘android’ ? ‘web’ : ‘system’,
);
它应该指定应用程序在登录时打开网络浏览器
这是参考: https://forums.expo.dev/t/how-to-fix-standalone-android-expo-facebook-login/23922
【讨论】:
以上是关于使用 expo 客户端响应本机 facebook 登录:input_token 中的 App_id 与查看应用程序不匹配的主要内容,如果未能解决你的问题,请参考以下文章