- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在 react-native 中处理 Facebook 登录错误。
在我的应用程序全新安装后尝试登录会向用户显示弹出窗口:
"Facebook. Application would like to access your basic profile info and list of friends."
有两个选项:“不允许”和“确定”。在正常流程中,我得到了一个合适的 token 。但是,如果用户在 onLoginFinished
中拒绝,我会得到以下结果:
{
"isCancelled": true,
"grantedPermissions": null,
"declinedPermissions": null
}
没有关于取消原因的信息。拒绝是使用 'system_account'
获得 "isCancelled": true
的唯一原因吗?
之后,所有连续尝试使用 '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>
)
}
}
据我所知,我只能在收到 'system_account'
的取消后切换到 'native'
登录行为并单独处理它的行为是吗唯一的办法?
最佳答案
使用 Facebook 登录时,有几种情况需要处理。
如果你勾选LoginManager.logInWithReadPermissions
它使用 native 代码(适用于 iOS) FBSDKLoginManagerLoginResult
来自 iOS SDK。在 documentation of iOS SDK isCancelled
是一个 BOOL
,它显示“登录是否被用户取消。”
因此,如果您返回的结果中的isCanceled
为真,则表示用户已手动取消登录请求。这可能是因为用户改变了主意或误按了按钮,或者只是因为当他/她看到您要求的权限列表等时改变了主意。当您检查并看到 isCanceled
值为 true 那么您可以假设用户不想使用 facebook 登录,您可以这样继续 (重定向到另一个登录方法或显示用户应该登录的弹出窗口等).
如果用户完成 facebook 登录但未选中某些权限请求(如生日或喜欢等),权限将显示在 declinedPermissions
中。您可以检查此属性的 lenght
并根据需要进行处理。您可以创建一个对象,其中包含在任何权限被拒绝时需要显示的所有错误消息。
示例
const permissions = [
{
permissionName: 'user_likes',
errorMessage: 'To give you better results we need your likes'
},
{
permissionName: 'user_birthday',
errorMessage: 'Would you like to receive a gift from us on your birthday?'
},
{
permissionName: 'user_friends',
errorMessage: 'We can\'t match you without knowing your friends'
}
];
// ....
login = ()=>{
LoginManager.setLoginBehavior('system_account')
LoginManager.logInWithReadPermissions(permissions.map((permission) => (permission.permissionName)))
.then(this.onLoginFinished)
.catch(this.onLoginError)
}
onLoginFinished = (result)=>{
if(result.isCancelled) {
// user canceled login manually
} else {
if (result.declinedPermissions && result.declinedPermissions.lenght > 0) {
// handle declined permissions
result.declinedPermissions.forEach((declinedPermission) => {
// match the declinedPermission with the permission object
}
} else {
// user gave all the permissions
}
AccessToken.getCurrentAccessToken().then((data)=>{
this.props.onLogin(data.accessToken.toString())
})
}
}
关于javascript - React Native FBSDK 处理身份验证拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47105862/
我正在尝试构建一个 react-native ios 应用程序。我正在尝试从 curl -O https://raw.githubusercontent.com/facebook/react-nati
在安装 fbsdk 库并按照所有步骤正确链接它之后,我在使用 react-native run-android 构建我的 android 文件夹时遇到问题。以下是我的错误消息。 我已经尝试将我的默认
我正在 Swift 应用程序中通过 Facebook 编写登录。我下载了 FacebookSDK,链接了库并创建了桥接 header ,并将其添加到 Objective-C 桥接 header 中。其
我正在用 swift 编写一个项目,我对这门语言还很陌生。 我将变量“username”的值设置为我对 facebook sdk 的请求结果,但在图形请求后我的变量值变为 nil。变量赋值在图形请求本
我目前正在为我的应用程序实现 Facebook 登录,我正在尝试从配置文件中获取以下信息: 名字,姓,性别,和国家。 但是,我似乎只能获取除用户国家以外的所有内容。我试过像这样将我的参数设置到我的 F
运行命令 react-native run-android 或 ./gradlew build 时出现以下错误 :react-native-fbsdk:generateReleaseResValues
我这样做了: react-native init YourApp cd YourApp react-native install react-native-facebooksdk react-nati
在我的图像处理应用程序中,我尝试使用 Facebook Profile Expression Kit。调用方法后 [FBSDKProfileExpressionSharer uploadProfile
FBSDKAccessToken currentAccessToken nil after quitting app 我看了很多相关的线程,我的案例中的解决方案仍然难以辨认。 这是我的 AppDele
分享静态照片时,我可以让我的应用程序切换到 Facebook 来分享该图像。它似乎与视频不一样。 这分享一张照片就好了。它移动到 Facebook 应用程序以确认帖子: let sharePhoto
我正在设置使用 facebook 登录,我想做的是当用户第一次授权该应用程序时,他们会转到一个新的 VC,在那里他们选择一个用户名。 但是,如果该用户注销然后再次使用 facebook 登录,我不希望
我们在模拟器中遇到应用程序传输安全错误(在 OSX 10.10.5 上运行的 Xcode 7)。我们为 iOS9 实现了 FB 指南。 调用的FB graph api是基于SDK v.3.24的。 在
我想在 Facebook 上分享图片,为此我这样做了: let photo: FBSDKSharePhoto = FBSDKSharePhoto() photo.image = croppedImag
根据标题,在我的设备上测试时,我收到 nil 可选展开错误,但在模拟器上却没有 - 我发现此问题的原因是调用 FBSDKProfile.currentProfile.name或类似的。我记得这给我在模
onLoginFinished 的结果只是告诉我授予的权限。来自repo ,不清楚如何获取用户配置文件。似乎 react-native-fbsdkcore 应该包装 FBSDKProfile.h 但看
我正确设置了 Facebook 登录(我能够使用 Facebook 按钮登录并检索个人资料数据)。我按照 FB 开发人员指南设置了 SSK 和登录按钮。当我返回按钮并想注销时出现问题。这是我得到的:
我设置了与 FB 开发者页面相同的所有内容(appId、appName、bundleId...)。我在 FBSDK 4.6 和 iOS 9 上工作。我也已经在 info.plist 上添加了这个 ke
我需要在 react-native 中处理 Facebook 登录错误。 在我的应用程序全新安装后尝试登录会向用户显示弹出窗口: "Facebook. Application would like t
我已经集成了 react-native-fbsdk 库并获取用户个人资料信息,例如除电子邮件之外的姓名、中间名等 我已经尝试过 readPermissions={["email,"public_pro
不要将其作为重复问题,我提出这个问题是因为答案没有帮助,集成对我来说效果很好,但页面加载速度非常慢。 加载登录屏幕确实需要很长时间。登录操作需要超过 8-50 秒或更长时间。 有时加载验证屏幕需要超过
我是一名优秀的程序员,十分优秀!