Facebook user_friends 权限不再返回更改应用名称后使用该应用的朋友
Posted
技术标签:
【中文标题】Facebook user_friends 权限不再返回更改应用名称后使用该应用的朋友【英文标题】:Facebook user_friends permission no longer returning friends who use the app after changing app name 【发布时间】:2014-08-06 23:11:09 【问题描述】:我一直在我的 iPhone 应用程序中使用 Facebook SDK,使用放置在 Interface Builder XIB 文件中并在视图控制器 .m 文件的委托方法中初始化的 FBLoginView 登录用户,如下所示:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
self.loginView = [self.loginView initWithReadPermissions: @[@"public_profile", @"user_friends"]];
self.loginView.delegate = self;
return self;
我尝试在用户这样登录后获取好友列表:
FBRequest* friendsRequest = [FBRequest requestForMyFriends];
[friendsRequest startWithCompletionHandler: ^(FBRequestConnection *connection,
NSDictionary* result,
NSError *error)
NSArray* friends = [result objectForKey:@"data"];
我有两个 Facebook 帐户正在使用我的应用程序,因此一个应该能够在此请求中检索另一个。直到今天,当我尝试更改应用程序名称时,它工作正常并检索了朋友。现在,friends
最终成为一个空数组。我尝试删除然后重新授权两个帐户上的应用程序。我已确保两个帐户都是 Facebook 上的朋友。就在我准备将完成的应用提交给 App Store 审核时,我陷入了困境,别无选择!
我在 Facebook 上的 App ID 和我在 app-Info.plist 中的 FaceBookAppID 是相同的,并且从未更改过。之前和现在之间的唯一区别:我在developers.facebook.com 上更改了我的应用程序包ID,使其与我的PLIST 中的包标识符相同。我的 PLIST 中的显示名称和我的 FacebookDisplayName 都已更改并且现在相同。
【问题讨论】:
您是否向两个用户请求了朋友的权限并都授予了权限? @WizKid initWithReadPermissions 应该通过将 @"user_friends" 传递到权限数组来执行此操作。我通过两个帐户上的应用程序登录了 Facebook。奇怪的是,登录页面只说该应用程序正在使用公共配置文件,但我认为它总是这样做。如果出现错误,它不应该为朋友 NSArray 返回一个空数组,而是返回 nil,对吗?我会尝试设置断点并检查 NSError 以防万一(明天)。 @9000error
是 nil
。
【参考方案1】:
我找到了答案。我找错地方了;该问题与 Facebook 上的名称更改无关。我发现,我的问题中的这段代码是在 XIB 已经在 loginView
上调用 init
之后调用的,默认情况下它只提供公共配置文件。之后调用initWithReadPermissions
并没有添加更多权限;事实上,这个调用似乎被忽略了:
更新:实际上,回想起来,我认为问题在于我在分配之前就在我的FBLoginView
上调用了initWithReadPermissions
。我的新手错误。
self.loginView = [self.loginView initWithReadPermissions: @[@"public_profile", @"user_friends"]]; // loginView is an FBLoginView
但如果我把它放在viewDidLoad
中并删除其他代码,这将有效:
self.loginView.readPermissions = @[@"user_friends"];
我一定是在更改名称后才注意到这个问题,因为我从我的帐户中删除了该应用程序并重新添加它,删除了在我为此视图控制器使用 XIB 之前已授予的旧 user_friends 权限。然后我将其归咎于名称更改,并在 Facebook 开发网站上搜索无果。
【讨论】:
我试过你的代码,但仍然有同样的问题。你能否给我写一个更详细的答案,说明你是如何修复它的。非常感谢。 除了在viewDidLoad
中而不是在initWithNibName
中设置FBLoginView
的读取权限之外,我并没有真正做任何事情。回顾这个答案,我认为问题在于,当我尝试初始化它时,甚至没有分配FBLoginView
……一年前我还是个新手。
谢谢。我在 init 方法中初始化了 FBLoginView,然后按照你的描述在 viewDidLoad 中设置了读取权限,就可以了。以上是关于Facebook user_friends 权限不再返回更改应用名称后使用该应用的朋友的主要内容,如果未能解决你的问题,请参考以下文章
ios Facebook 登录显示“无效范围:basic_info”。改用 public_profile, user_friends