Google SignIn SDK因抛出错误而失败,发生了不可恢复的登录失败-捕获错误:React Native

时间:2018-12-17 13:28:13

标签: javascript android reactjs react-native google-login

我一直在尝试将社交登录集成到我的react本机项目中,在该项目中我能够成功进行Facebook登录,但是无法登录到google。 react-native-google-signin 库用于google。

我使用的代码。

componentDidMount() {
GoogleSignin.hasPlayServices({ autoResolve: true }).then(() => {
// play services are available. can now configure library
}).catch((err) => {

console.log("Play services error", err.code, err.message);
})
GoogleSignin.configure({
scopes: ["https://www.googleapis.com/auth/drive.readonly"], // what API you want to access on behalf of the user, default is email and profile
// iosClientId: <FROM DEVELOPER CONSOLE>, // only for iOS
webClientId: "xxx", // client ID of type WEB for your server (needed to verify user ID and offline access)
// offlineAccess: true // if you want to access Google API on behalf of the user FROM YOUR SERVER
//hostedDomain: '' // specifies a hosted domain restriction
//forceConsentPrompt: true // [Android] if you want to show the authorization prompt at each login
//accountName: '' // [Android] specifies an account name on the device that should be used
})
.then(() => {
// you can now call currentUserAsync()
});
    _signIn = async () => {

        try {

            await GoogleSignin.hasPlayServices(

              )

          const userInfo = await GoogleSignin.signIn();
          console.log('User Info --> ', userInfo);
          this.setState({ userInfo });
        } catch (error) {

          console.log('Message', error.message);
          if (error.code ===  statusCodes.SIGN_IN_CANCELLED) {
            console.log('User Cancelled the Login Flow');
          } else if (error.code === statusCodes.IN_PROGRESS) {
            console.log('Signing In');
          } else if (error.code === statusCodes.PLAY_SERVICES_NOT_AVAILABLE) {
            console.log('Play Services Not Available or Outdated');
          } else {
            console.log('Some Other Error Happened');
          }
        }
      };

错误响应:

Message: A non-recoverable sign in failure occurred -catch error

9 个答案:

答案 0 :(得分:2)

在android文件夹中运行gradlew signingReport并检查列出的所有 sha1 ,如果您使用的是Firebase,请确保在以下位置找到所有不同的 sha1 列表已添加到firebase项目中,然后下载google-services.json,再次将其替换为您项目中的旧版本,然后运行cd android && gradlew clean并再次构建项目

答案 1 :(得分:1)

那是由于clientId。 在google developer控制台中,当您为webClientID配置项目时,与其创建一个新项目,不如选择一个现有项目,即先创建该项目,然后再选择它来创建凭据。

首先创建一个新项目,如下图所示 create a project this way

然后从列表中选择该项目以创建凭据enter image description here

对我有用。

并开始登录配置

GoogleSignin.hasPlayServices({ autoResolve: true }).then(() => {

})
.catch((err) => {
      console.log("Play services error", err.code, err.message);
})

GoogleSignin.configure({
     scopes: ["https://www.googleapis.com/auth/userinfo.profile"],//scopes as you need 
     webClientId: "***(Your clientId)",
     //iosClientId: <FROM DEVELOPER CONSOLE>, // only for iOS 
     //offlineAccess: true, //(give it true if you need serverAuthCode i.e cross client authorisation)
     //hostedDomain: '' 
     //forceConsentPrompt: true // [Android] if you want to show the authorization prompt at each login
     //accountName: ''
})

答案 2 :(得分:1)

此修复程序还可以帮助您

  1. 转到console.developer.google.com
  2. 选择项目。
  3. 转到凭据。
  4. 切换到“ O Auth同意”屏幕。
  5. 更改应用名称并填写电子邮件ID(可选)
  6. 保存在底部

尝试立即登录,它应该可以工作。

答案 3 :(得分:1)

就我而言,我已经使用了测试应用程序的软件包名称(例如com.loginTest)。使我的包裹名称唯一后,我就可以解决此问题!

答案 4 :(得分:1)

关注here

  • cd ./android && ./gradlew 签名报告
  • 取 Task :app:signingReport、Variant: debugAndroidTest、Config: debug 的 SHA1
  • 在项目设置、Android 应用下的 Firebase 控制台中更新它,添加 SHA1
  • 下载google-services.json,放在./android/app
  • 转到身份验证,然后登录方法,然后按谷歌
  • 获取 Web 客户端 ID 并将其用于您的 GoogleSignin.configure({ webClientId: ... });
  • 此 Web 客户端 ID 应与 https://console.developers.google.com/apis/credentials?project= -> Credentials -> OAuth 2 Client ID -> Web Client 中列出的相同

答案 5 :(得分:0)

我搜索并遇到了以下步骤

  
      
  1. https://console.developers.google.com上启用OAuth
  2.   
  3. 启用时复制并粘贴SH1
  4.   
  5. 启用Google登录Firebase身份验证
  6.   
  7. 使用Oauth Client_Id代替您的WebClient ID
  8.   

答案 6 :(得分:0)

我知道,我回答这个问题很晚了。我只是遇到了同样的问题,花了将近4-5个小时来解决这个问题。 我发现的解决方案: “在Firebase上添加支持电子邮件后,它开始工作” 我认为这不是应用程序或配置问题。可能是应报告的Firebase问题,而文档中却没有任何地方。

Screenshot for Firebase settings

答案 7 :(得分:0)

您需要添加support email。 为此,请转到:-

  1. 转到console.developer.google.com
  2. 选择项目。
  3. 转到项目设置
  4. 在“常规”标签下,向下滑动以添加支持电子邮件。在那添加您的电子邮件。

答案 8 :(得分:0)

在 firebase 中添加支持电子邮件,它将开始工作