react-native-google-sign-in中的错误代码16“ CANCELLED”

时间:2019-05-27 10:43:00

标签: javascript firebase react-native google-signin sha1

我正在尝试在我的应用程序上实现google登录,并且一切运行良好,它要求我按登录按钮选择帐户,但响应它会向我发送代码16“ CANCELLED”错误。

我已经通过 npm install react-native-google-sign-in 安装了库。 然后我链接了它。我在firebase上创建了一个新项目,并从那里下载google-services.json并将其粘贴到android / app中。还生成了SHA1版本并添加了Firebase项目。

componentDidMount() {
   GoogleSignin.configure({
     //It is mandatory to call this method before attempting to call signIn()
     scopes: ['https://www.googleapis.com/auth/drive.readonly'],
     // Repleace with your webClientId generated from Firebase console
     webClientId:
       'my client id',
   });
 }

Google登录按钮和操作


   <TouchableOpacity 
     onPress={() => _signIn()}
     style={{height:50,width:50,borderRadius:50}}
   >
      <Image
       style={{height:50,width:50}}
        resizeMode='contain'
        source={ImagePath.GOOGLE_ICON}
     />
   </TouchableOpacity>

  _signIn = async () => {
    //Prompts a modal to let the user sign in into your application.
    try {
      await GoogleSignin.hasPlayServices({
        //Check if device has Google Play Services installed.
        //Always resolves to true on iOS.
        showPlayServicesUpdateDialog: true,
      });
      const userInfo = await GoogleSignin.signIn();
      alert(JSON.stringify(userInfo))
      console.log('User Info --> ', userInfo);
      this.setState({ userInfo: 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 {
        alert(JSON.stringify(error))
        console.log('Some Other Error Happened',error);
      }
    }
  };

这些是我的签名配置

       release {
            if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
                storeFile file(MYAPP_RELEASE_STORE_FILE)
                storePassword MYAPP_RELEASE_STORE_PASSWORD
                keyAlias MYAPP_RELEASE_KEY_ALIAS
                keyPassword MYAPP_RELEASE_KEY_PASSWORD
            }
        }

我希望Google成功登录并提供用户数据作为回应。任何帮助将不胜感激。谢谢

3 个答案:

答案 0 :(得分:0)

包括Release SHA1而不是调试...如果您仍在为此而苦苦挣扎,这就是我所做的(我使用命令行,Android studio可能会使其变得更容易):

keytool -list -v -keystore "%USERPROFILE%.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android

这将吐出包含SHA-1的证书。

Copy the SHA1 and add it to the app in Firebase.

Download the google-services.json and add it to /android/app/

以防万一,请使用以下命令删除tmp文件和缓存:

del %appdata%\Temp\react-native-* & cd android & gradlew clean & cd .. & del node_modules/ & npm cache clean --force

编辑

在build.gradle文件中定义密钥存储详细信息(需要在构建文件的android节下添加)

android {
    ...
    signingConfigs {
        release {
            storeFile file("release-key.keystore")
            storePassword 'passwotd'
            keyAlias 'alias'
            keyPassword 'password'
        }
    }

    buildTypes {
        release {
            ...
            signingConfig signingConfigs.release
        }

        debug {
            debuggable true
        }
    }
}
...

答案 1 :(得分:0)

  • 解决此问题的方法是将 SHA1 添加到 Firebase。

  • 如果您要测试调试版本,则添加 debug SHA1,发布版本使用 release SHA1。

  • 将 SHA1 证书指纹添加到 Firebase 后。

  • 下载 firebase google-services.json 文件并将其添加到 /android/app/

您可以通过以下命令创建调试密钥

  • cd android
  • gradlew signingReport

cd android && ./gradlew signingReport

Reference link

答案 2 :(得分:-1)

请共享您的AndroidManifest.xml文件。请检查您是否在清单中添加了任何启动模式。如果是这样,请删除。