我希望应用程序在所有三种情况下都能正常工作。
我在我的 viewdidload 方法中使用了以下代码并实现了委托(delegate)方法。
FBLoginView *fb_loginView = [[FBLoginView alloc] init];
fb_loginView.readPermissions = @[@"basic_info", @"email", @"user_friends"];
fb_loginView.delegate = self;
fb_loginView.frame = CGRectMake(10, 250, 300, 100);
[self.view addSubview:fb_loginView];
Case-I 工作正常但是 Case-II & Case-III 不工作
案例-I:(FB 应用程序未安装在设备上且仅 FB 凭据存储在设置中) 在这种情况下,当我按下登录按钮时,它会询问我的权限,我可以获取用户的基本信息。
案例-II:(安装了 FB 应用程序但 FB 凭据未存储在设置中) 在这种情况下,当我按下登录按钮时,它会将我带到已安装的 FB 以进行登录。我登录了,但显示错误 “无效范围:basic_info”。请改用 public_profile、user_friends。
案例 III:(未安装 FB 应用程序且 FB 凭据未存储在设置中) 在这种情况下,当我按下登录按钮时,它会将我带到 ios safari 浏览器以进行 fb 登录。我登录了,但显示同样的错误 “无效范围:basic_info”。请改用 public_profile、user_friends。
当我使用
fb_loginView.readPermissions = @[@"public_profile", @"email", @"user_friends"];
然后 Case-I 和 Case-II 工作正常但 Case-III 显示跟随错误。
Error = Error Domain=com.facebook.sdk Code=2 "The operation couldn’t be completed. (com.facebook.sdk error 2.)" UserInfo=0x1cd61ba0 {com.facebook.sdk:ErrorLoginFailedReason=com.facebook.sdk:SystemLoginCancelled, com.facebook.sdk:ErrorInnerErrorKey=Error Domain=com.apple.accounts Code=7 "The Facebook server could not fulfill this access request: The proxied app cannot request publish permissions without having being installed previously." UserInfo=0x1cd622e0 {NSLocalizedDescription=The Facebook server could not fulfill this access request: The proxied app cannot request publish permissions without having being installed previously.}, com.facebook.sdk:ErrorSessionKey=, expirationDate: (null), refreshDate: (null), attemptedRefreshDate: 0001-12-30 00:00:00 +0000, permissions:(null)>}
最佳答案
错误会告诉您如何修复它。
@"basic_info"
不再被 Facebook API 接受。您应该使用 @"public_profile"
或 @"user_friends"
,或 @[@"public_profile", @"user_friends"]
(取决于您的用例)。
您在使用 @"public_profile"
时看到的错误与此 Facebook 请求无关。它与您请求 @"publish_actions"
的请求相关,因此出现消息“代理应用程序无法请求 publish 权限,而无需事先安装。”
关于ios Facebook 登录显示 "Invalid Scope: basic_info"。使用 public_profile, user_friends 代替,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26762892/