1

我发现了一个奇怪的 iOS 帐户设置问题。当我处理ACAccount 更新问题时,我发现如果用户在安装我的应用程序后在设备设置中登录 facebook,我的应用程序将无法访问 facebook 帐户。

准确地说,我的应用程序不会显示在“允许这些应用程序使用您的帐户”中。因此,我对这个问题做了一些测试:

(1)。安装应用程序后登录 Facebook ->未显示

(1-1)。删除应用程序并重新安装 ->未显示

(2)。应用安装后重新登录Facebook ->不显示,所有已授权或未授权的应用也不会显示。

(3)。安装应用前的 Facebook 登录 ->显示

而且,一旦遇到问题是不可逆的,无论你重新登录facebook、重新安装应用程序还是重启设备都无法解决问题。只有原生 iOS 应用程序和 Facebook 应用程序将保留在列表中。

有一个关于这个的老问题,但这个问题没有得到回答。有人遇到同样的问题吗?

更新于 2013.11.20 上午 11:38

我在使用 ACAccount 时犯了两个错误,以下是获取 facebook 帐户访问权限的示例代码:

    // Check if store exists
if(!_accountStore)
    _accountStore = [[ACAccountStore alloc] init];

ACAccountType *facebookTypeAccount = [_accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];

// Request access, note that one should not check if the account is available until the access right is granted
[_accountStore requestAccessToAccountsWithType:facebookTypeAccount
                                       options:@{ACFacebookAppIdKey: @"FACEBOOK_API_KEY", ACFacebookPermissionsKey: @[@"read_stream"]}
completion:^(BOOL granted, NSError *error) {
    if(granted){
        NSArray *accounts = [_accountStore accountsWithAccountType:facebookTypeAccount];
        _facebookAccount = [accounts lastObject];
        NSLog(@"Success");
    }else{
        // ouch
        _facebookAccount = nil;
        NSLog(@"Failed, Error: %@", error);
        dispatch_async(dispatch_get_main_queue(), ^{
            NSString *message = [NSString stringWithFormat:@"No facebook account or access denied by user. Error:%@", error];
            UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"系統提示" message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
            [alert show];
        });
    }

}];
  1. 在获得访问权限之前,我会检查帐户数量。

  2. 我不确定这是否是 APPLE SDK 的错误,如果我请求访问“publish_stream”,请求将失败。

然后,我在这里看到了有关 requestAccessToAccountsWithType 错误的讨论。据说我们应该请求两次权限,一次读取,一次写入。

因此,我将访问权限从“publish_stream”更改为“read_stream”,然后它就可以工作了。我的应用程序再次显示在列表中。

虽然请求写权限失败,但不影响发帖对用户的行为能力。

更新于 2014.8.12 上午 12:31

maml报告说,在执行上述步骤后,该权限可能仍会被拒绝,但该应用程序确实出现在设置中,这使得可以将其打开。

4

1 回答 1

0

我已经在更新我的问题时解决了这个问题。这似乎是一种解决方法,但目前它确实解决了问题。如果您想了解有关解决方案的详细信息,请参阅上面已编辑的问题。

为了解决这个问题,我们必须:

  1. 将权限访问从“publish_stream”更改为“read_stream”。尽管您已请求读取权限,但您仍然可以发布到用户的时间线。

  2. 没有进一步的步骤。

我认为这可能是 ACAccount 框架的错误。但是,它确实节省了我们研究 Facebook API 的时间。因此,如果您使用此方法,请记住密切关注此问题,该问题将来可能会修复。

笔记。我回答我自己的问题以防止它变成风滚草......

于 2014-02-27T07:16:24.057 回答