我需要谷歌登录我的本机应用程序。所以我谷歌很多,我发现react-native-google-signin似乎很棒,但我坚持一个错误。
中的所有步骤操作我有以下代码:
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
我搜索githubs问题,我发现有人被要求再次下载谷歌服务。我这样做,但该文件等于我以前下载的文件。 很确定,我错过了什么,但不是没有。 有人可以帮助我吗?
我在github中打开了一个问题,但我没有采取太多行动。
提前致谢
答案 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)
这可能对你有所帮助,试试这个:
使用暂停代码
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)
即使我正在传真此问题,也可以通过执行以下步骤来解决。
重复上述步骤以调试和生产SHA-1证书指纹。
注意:我们需要针对上述 APP签名之后生成的SHA-1遵循上述步骤,再创建一个OAuth客户端ID。
注意:我们尚未完成,请再创建一个Web应用程序OAith客户端ID,并在您的应用中使用Web应用程序客户端ID 。 希望这可以帮助像我这样的人!