我需要在react-native中处理Facebook登录错误。
尝试在全新安装我的应用程序后登录,向用户显示弹出窗口:
"使用Facebook。应用程序想要访问您的基本个人资料信息 和朋友列表。"
有两个选项:"不允许"和"好的"。在正常流量下,我得到一个合适的令牌。但是如果用户拒绝onLoginFinished
我得到以下结果:
{
"isCancelled": true,
"grantedPermissions": null,
"declinedPermissions": null
}
哪个没有关于它被取消的原因的信息。拒绝是使用"isCancelled": true
获取'system_account'
的唯一理由吗?
之后,所有连续尝试使用'system_account'
登录的操作都会立即失败并显示以下错误:
{
"code": "FacebookSDK",
"domain": "com.facebook.sdk.login",
"framesToPop": 1,
"nativeStackIOS": [...],
"userInfo": {
"NSLocalizedDescription": "Access has not been granted to the Facebook account. Verify device settings.",
"com.facebook.sdk:FBSDKErrorLocalizedDescriptionKey": "Access has not been granted to the Facebook account. Verify device settings."
}
}
它给了我错误,我可以向用户显示但是本地化我无法可靠地解析它。所以问题是如何可靠地检测用户何时没有授予权限?
我的代码:
import React from 'react'
import {AccessToken, LoginManager} from 'react-native-fbsdk'
class Login extends React.Component {
login = ()=>{
LoginManager.setLoginBehavior('system_account')
LoginManager.logInWithReadPermissions()
.then(this.onLoginFinished)
.catch(this.onLoginError)
}
onLoginFinished = (result)=>{
if(result.isCancelled) {
//
} else {
AccessToken.getCurrentAccessToken().then((data)=>{
this.props.onLogin(data.accessToken.toString())
})
}
}
onLoginError = (error)=>{
// Want to handle this case but
//can only show a message to the user =(
}
render() {
return (
<View>
<TouchableHighlight onPress={this.login}>
<View><Text>Facebook</Text></View>
</TouchableHighlight>
</View>
)
}
}
从我能想到的情况来看,我只能在收到'native'
取消后切换到'system_account'
登录行为,并且单独处理它的行为是唯一的方法吗?
答案 0 :(得分:2)
使用Facebook登录时,有几种情况需要处理。
如果您检查LoginManager.logInWithReadPermissions
它使用来自iOS SDK的本机代码(适用于iOS) FBSDKLoginManagerLoginResult
。在documentation of iOS SDK isCancelled
中有BOOL
,其中显示“用户是否取消了登录信息。”
因此,如果返回的结果isCanceled
为真,则表示用户手动取消了登录请求。这可能是因为用户改变了主意或错误地点击了某个按钮,或者只是因为当他/她看到您要求的权限列表时他改变了主意。当您检查并看到{{ 1}}值为true然后您可以假设用户不想使用facebook登录,您可以像那样继续(重定向到另一个登录方法或显示用户应该登录的弹出窗口等)。。
如果用户完成了Facebook登录但未选中某些权限请求(如生日或喜欢等),则权限将显示在isCanceled
中。您可以查看此属性的declinedPermissions
并按照您的意愿继续操作。您可以创建一个对象,其中包含在任何权限下降时需要显示的所有错误消息。
示例强>
lenght