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 以防万一(明天)。 @9000 errornil 【参考方案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 SDK 权限未经审查

facebook graph api不返回所有数据

Facebook - 最高分

ios Facebook 登录显示“无效范围:basic_info”。改用 public_profile, user_friends

facebook好友列表获取

请求 Facebook 好友返回空