我发现了一个奇怪的 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];
});
}
}];
在获得访问权限之前,我会检查帐户数量。
我不确定这是否是 APPLE SDK 的错误,如果我请求访问“publish_stream”,请求将失败。
然后,我在这里看到了有关 requestAccessToAccountsWithType 错误的讨论。据说我们应该请求两次权限,一次读取,一次写入。
因此,我将访问权限从“publish_stream”更改为“read_stream”,然后它就可以工作了。我的应用程序再次显示在列表中。
虽然请求写权限失败,但不影响发帖对用户的行为能力。
更新于 2014.8.12 上午 12:31
maml报告说,在执行上述步骤后,该权限可能仍会被拒绝,但该应用程序确实出现在设置中,这使得可以将其打开。