反应原生谷歌登录返回状态代码:12501

时间:2016-07-23 13:52:23

标签: javascript react-native google-play-services google-signin

我需要谷歌登录我的本机应用程序。所以我谷歌很多,我发现react-native-google-signin似乎很棒,但我坚持一个错误。

我按照READ.meAndroide Guide

中的所有步骤操作

我有以下代码:

 componentDidMount() {


     GoogleSignin.hasPlayServices({autoResolve: true}).then(() => {
        // play services are available. can now configure library
        GoogleSignin.configure({
            scopes: [
                'email', 'profile', 'https://www.googleapis.com/auth/plus.profile.emails.read', 'https://www.googleapis.com/auth/plus.login'
            ],
            webClientId: 'web-clientid from the console developper',
            offlineAccess: true
        }).then(() => {
            // you can now call currentUserAsync()
            GoogleSignin.currentUserAsync().then((user) => {
                console.log('USER', user);
            }).done();
        });
     });
}

signIn() {
    GoogleSignin.signIn()
        .then((user) => {
            console.log(user);
        })
        .catch((err) => {
            console.log('WRONG SIGNIN', err);
        })
        .done();
}

 render() {
    return (
        <Image source={BACKGROUND} style={styles.container}>
            <Image source={ICON}></Image>
            <Text style={styles.welcome}>
                APP TEST
            </Text>

            <GoogleSigninButton
                style={{width: 230, height: 48}}
                size={GoogleSigninButton.Size.Standard}
                color={GoogleSigninButton.Color.Light}
                onPress={this.signIn}
            />
        </Image>
    );

当我点击登录按钮时,弹出一个窗口,我选择我想要使用的Google帐户。但当我选择帐户时,我有以下错误:错误的SIGNIN错误:未知状态代码:12501(...)

所以我看看Androide Guide底部的常见问题 并确认android/app/google-services.json中的certificate_hash是否相同。 我还检查了app/build.graddle中的aplication id是否与我在google云中输入的内容相同。

我认为问题在于我在我的范围内传递的WebclientId,我已经通过了Web类型,但已经尝试了oauth 2中的两个客户端ID

screen

我搜索githubs问题,我发现有人被要求再次下载谷歌服务。我这样做,但该文件等于我以前下载的文件。 很确定,我错过了什么,但不是没有。 有人可以帮助我吗?

我在github中打开了一个问题,但我没有采取太多行动。

提前致谢

3 个答案:

答案 0 :(得分:1)

您分享的自述文件

  

d。登录完成后,我收到以下错误错误代码   12501.该怎么办?

     

这是权限错误。确保中的certificate_hash   android / app / google-services.json与您的证书相匹配。

     

获取sha1-hash

     

keytool -exportcert -keystore~ / .android / debug.keystore -list -v另外   确保应用程序ID与您在云上输入的应用程序ID匹配   控制台。

有一个.user文件(或类似的东西),我无法记住这一点。它位于隐藏文件夹中,因此您必须使用finder查找该文件并将其删除。它应该工作。查看代码用于查找它的所有路径,您必须为路径调试这些文件。

答案 1 :(得分:0)

这可能对你有所帮助,试试这个:

  • 检查您的google-services.json cirtificate_hash代码。  将其与您的Android签名证书SHA-1相匹配。  使用此链接访问他们的https://developers.google.com/mobile
  • 我在模拟器上测试了它,但模拟器没有谷歌播放服务,所以我在我的Android手机上测试了它。
  • 使用暂停代码

    import {GoogleSignin, GoogleSigninButton} from 'react-native-google-signin';
    

然后

componentDidMount() {
    GoogleSignin.configure({
        scopes: [
            'email', 'profile', 'https://www.googleapis.com/auth/plus.profile.emails.read', 'https://www.googleapis.com/auth/plus.login'
        ],
        webClientId: 'use here oauth_client[{client_id}]',//refer this given below example:
        offlineAccess: true
    }).then(() => {
        // you can now call currentUserAsync()
        GoogleSignin.currentUserAsync().then((user) => {
             //user = GoogleSignin.currentUser();
            console.log('USER', user);
            this.setState({user: user});
        }).done();
    });
}

_signIn() {
    GoogleSignin.signIn()
        .then((user) => {
            console.log('this1' + JSON.stringify(user));                
        })
        .catch((err) => {
            console.log('WRONG SIGNIN', err);
        })
        .done();
}

_signOut(){
    GoogleSignin.signOut()
        .then(() => {
            console.log('out');
        })
        .catch((err) => {

        });
}

render() {

    return (
        <View style={styles.container}>
            <Text style={styles.welcome}>
                Welcome to React Native!
            </Text>
            <Text style={styles.instructions}>
                To get started, edit index.android.js
            </Text>
            <Text style={styles.instructions}>
                Double tap R on your keyboard to reload,{'\n'}
                Shake or press menu button for dev menu
            </Text>
            <GoogleSigninButton
                style={{width: 48, height: 48}}
                size={GoogleSigninButton.Size.Icon}
                color={GoogleSigninButton.Color.Dark}
                onPress={this._signIn.bind(this)}/>
            <TouchableHighlight>
                <Text onPress={this._signOut.bind(this)}>
                    signout
                </Text>
            </TouchableHighlight>
        </View>
    );
}

:示例 - &gt; webClientId:&#39; 1059 .......... googleusercontent.com&#39;他们是google-services.json中的两个客户端ID oauth_client []使用第一个。您可以将其与下面https://console.developers.google.com/apis/credentials下面给出的凭据链接进行比较...名称:Web客户端类型:Web应用程序客户端ID:1059 ........ googleusercontent.com

这解决了我的问题。 祝你有美好的一天。 谢谢。:))

答案 2 :(得分:0)

即使我正在传真此问题,也可以通过执行以下步骤来解决。

  1. 创建密钥存储区并使用SHA-1证书指纹。
  2. https://console.developers.google.com/apis/credentials创建OAuth客户端ID enter image description here
  3. 选择“应用程序类型”为android,输入程序包名称,输入在步骤1中创建的SHA-1证书指纹。

重复上述步骤以调试和生产SHA-1证书指纹。

注意:我们需要针对上述 APP签名之后生成的SHA-1遵循上述步骤,再创建一个OAuth客户端ID。 enter image description here

注意:我们尚未完成,请再创建一个Web应用程序OAith客户端ID,并在您的应用中使用Web应用程序客户端ID enter image description here 希望这可以帮助像我这样的人!