11

我在这方面需要一些帮助....

所以我面临的问题是,在从 ACAccount 获取 Facebook 帐户时,警报视图通知了太多权限。当我使用 Facebook 的 ACAccount 登录时,我收到一个警告框。

它说APP_NAME would like to access your basic profile info and list of friends

即使我的权限集是一个空数组,这也会显示出来。

NSArray * FB_PERMISSIONS = @[];
// or FB_PERMISSIONS = @[@"public_profile", @"likes", @"email"];
// It does not matter what the array is -> The alert has extra sentences.

ACAccountType *FBaccountType= [_accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
NSString *key = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"FacebookAppID"];;
NSDictionary *dictFB = [NSDictionary dictionaryWithObjectsAndKeys:key,ACFacebookAppIdKey,FB_PERMISSIONS,ACFacebookPermissionsKey, nil];
[_accountStore requestAccessToAccountsWithType:FBaccountType options:dictFB completion:

我想在这里做什么?

我只需要“ public_profile ”、@“ email ”和“ likes ”。警报说APP_NAME would like to access your profile, and likes on your behalf. In addition, APP_NAME would like to access your basic profile info and list of friends

为什么那里有第二句话?我该如何摆脱它?我可以看到许多应用程序的第二行没有显示关于基本个人资料和朋友列表的内容。

预期结果:

APP_NAME would like to access your profile and likes.

更新:

检查我的答案以获得解决方案。

4

3 回答 3

5

FB SDK 文档中没有任何内容可以解释这些。他们这样做是为了让用户可以使用 Facebook pop UI 并选择他们想要授权的权限。我猜 Facebook 设计的理念是为用户提供尽可能多的控制权和透明度。但是随着操作系统的弹出,它在下面隐藏了很多权限。我想这是 Apple 的设计理念,即显示最少的信息。这最适合开发人员的情况,因为当用户看到应用程序要求这么多权限时,他们通常会吓坏。

无论如何,如果您看一下,FBSDKLoginManager+Internal.h您可以检查系统登录的功能。进一步挖掘,我发现 FBSDKLoginButton 毫无意义。解决此问题的最佳方法是使用您自己的 FBSDKLoginManager 实例,并将系统帐户类型设置为本地,如果您获得error code 306,则回退到默认登录机制。

不知何故->>这种方式不显示额外的权限。我不知道怎么做。我所知道的是,现在一切都已到位。

此外,您将必须设置一个单独的侦听器,ACAccountStoreDidChangeNotification以便您可以绑定一些边缘情况。但是,是的,\m/

于 2015-11-25T08:53:56.650 回答
2

修复

解决此问题的方法包括将代码添加到视图头文件以及将代码添加到视图文件。下面列出了代码示例。

在视图头文件中添加:

//  ViewController.h
#import <FBSDKLoginKit/FBSDKLoginKit.h>
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet FBSDKLoginButton *loginButton;
@end

并在视图文件中添加:

loginButton.readPermissions = 
@[@"public_profile", @"email", @"likes"];

请注意,第一个示例中的注释仅供参考。

为什么会这样?

您的问题发生的原因是因为帐户框架和 Facebook API 默认认为您的意思是每个权限。它要求您在代码中更加具体。我很确定你必须做第一个代码示例,它应该放在你的视图头文件中。我知道上面的代码不是您将要放入您正在处理的文件中的代码,但它只是为您提供了一个粗略的想法。

还在迷茫?

如果您仍然感到困惑,请在下面发表评论,我会尝试更新我的答案。如果您可以发送您正在使用他填充的数组而不是空白的代码,那将非常有帮助。如果我不清楚,请告诉我,我会尽我所能提供帮助。如有不便敬请见谅!

来源

主要是,我在这里找到了信息:https ://developers.facebook.com/docs/facebook-login/permissions/overview 和这里:https ://developers.facebook.com/docs/facebook-login/ios#权限 Facebook 是非常值得信赖和可信的。我认为...

于 2015-11-25T02:04:17.477 回答
0

您不使用 Facebook API 是否有原因?通过 iOS API 请求访问将要求用户通过 iOS 设置登录 Facebook。如果您使用 Facebook 的 API 发出相同的请求,它可以检测用户是否通过设置、FB 应用程序或 Safari 登录。如果用户没有登录,它会提示他们这样做(而不是仅仅出错并通过设置告诉他们这样做)

版本 4.X: https ://developers.facebook.com/docs/facebook-login/ios/permissions

FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init];
[loginManager logInWithReadPermissions:@[@"public_profile", @"likes", @"email"]
                fromViewController:self
                           handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
  //TODO: process error or result
 }];

版本 3.X

[FBSession openActiveSessionWithReadPermissions: @[@"public_profile", @"likes", @"email"]
                                   allowLoginUI:YES
                              completionHandler:
 ^(FBSession *session, FBSessionState state, NSError *error) {
     // Handle completion by calling AppDelegate
 }];
于 2015-12-01T19:28:46.153 回答