在我的React Native应用程序(在内置的APK中)调用Expo.Google.logInAsync()之后,我收到错误代码400“ redirect_uri_mismatch”。请注意,在Expo客户端上,我没有收到错误,Google登录页面崩溃了,没有错误。我怀疑错误是在本机端某处记录的。
我正在将Expo 32.0.0与React Native 32.0.0一起使用。
我已按照https://docs.expo.io/versions/v32.0.0/sdk/google/此处列出的说明进行操作,并创建了iOS和Android OAuth客户端ID。
下面是我的代码的副本:
const signInWithGoogleAsync = async () => {
try {
const result = await Expo.Google.logInAsync({
androidClientId: ANDROID_CLIENT_ID,
iosClientId: IOS_CLIENT_ID,
scopes: ['profile', 'email'],
});
if (result.type === 'success') {
return result.accessToken;
} else {
return {cancelled: true};
}
} catch(e) {
console.log(e);
}
}
我们将非常感谢您的帮助。
如果您需要其他信息,请告诉我。
谢谢。
答案 0 :(得分:1)
到目前为止,我只看到了一个临时修复程序。几天来我都遇到了同样的问题,并且由于
米歇尔·科姆 谁在这里提供了解决方案-> https://github.com/expo/expo/issues/3540
解决方案
继续使用Expo SDK 32。
按照Google SDK的SDK 31文档中所述,转到Google Developer Console并创建一个Android Oauth2客户端ID和一个iOS Oauth2客户端ID(确保程序包名称为host.exp.exponent
)。
按如下所示使用Android客户端ID和iOS客户端ID:
import { Platform } from 'react-native';
export const isAndroid = () => Platform.OS === 'android';
const result = await Google.logInAsync({
clientId: isAndroid() ? '<YOUR_ANDROID_CLIENT_ID>' : '<YOUR_IOS_CLIENT_ID>',
});
说明 我看到的主要问题是,即使在新文档中也声明了以下内容:
const clientId = '<YOUR_WEB_CLIENT_ID>';
事实是,在内部从Expo应用程序调用了请求,并且可以在错误页面上展开请求详细信息时看到:
如您所见,它将添加软件包名称host.exp.exponent。
无论如何,这仅在您处于开发或 Expo应用中时有效。如果创建一个独立的应用程序,则需要使用Google登录,这是完全不同的战斗。
答案 1 :(得分:0)
您必须在 app.json 中为您的应用程序提供正确的值,并在 GoogleDeveloper 控制台中创建 cliendID 时指定此值。 app.json 中的 android.package 和 ios.bundleIdentifier 应该有一个像“domain.subdomain1.subdomain2”这样的字符串值。例如 app.json:
"ios": {
"bundleIdentifier": "com.mydomain.myawsmapp"
}
"android": {
"package": "com.mydomain.myawsmapp"
}
答案 2 :(得分:0)
我在 Client Id
和 androidClientId: ANDROID_CLIENT_ID
中使用相同的 androidStandaloneAppClientId: ANDROID_CLIENT_ID
,方法是更改其中一个的 client id
对我有用
答案 3 :(得分:0)
来源:https://docs.expo.io/versions/latest/sdk/google/#using-it-inside-of-the-expo-app