虽然,有这样一个问题Facebook Error (7) iOS 6它已经关闭但没有任何答案!
在获取用户的Facebook帐户访问权限时,我遇到了错误:
error is: Error Domain=com.apple.accounts Code=7 "The Facebook server could not fulfill this access request: The proxied app is not already installed." UserInfo=0xa260270 {NSLocalizedDescription=The Facebook server could not fulfill this access request: The proxied app is not already installed.}
我正在执行这样的请求:
self.statusLabel.text = @"Waiting for authorization...";
if (self.accountStore == nil) {
self.accountStore = [[ACAccountStore alloc] init];
}
ACAccountType * facebookAccountType = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
NSDictionary * dict = @{ACFacebookAppIdKey : FB_APP_ID, ACFacebookAudienceKey : ACFacebookAudienceEveryone};
[self.accountStore requestAccessToAccountsWithType:facebookAccountType options:dict completion:^(BOOL granted, NSError *error) {
__block NSString * statusText = nil;
if (granted) {
statusText = @"Logged in";
NSArray * accounts = [self.accountStore accountsWithAccountType:facebookAccountType];
self.facebookAccount = [accounts lastObject];
NSLog(@"account is: %@", self.facebookAccount);
self.statusLabel.text = statusText;
[self postToFeed];
}
else {
self.statusLabel.text = @"Login failed";
NSLog(@"error is: %@", error);
}
}];
这个错误意味着什么?
答案 0 :(得分:16)
我已经解决了这个问题!
那是因为我没有传递权限数组!
虽然ACAccountStore
类声明此参数是可选的,但它不是!
应用程序的更多内容可能会启动并要求基本权限(因为它暗示)!
因此,您必须始终传递权限数组。
以下是帐户商店返回的错误代码的说明:
typedef enum ACErrorCode {
ACErrorUnknown = 1,
ACErrorAccountMissingRequiredProperty,
ACErrorAccountAuthenticationFailed,
ACErrorAccountTypeInvalid,
ACErrorAccountAlreadyExists,
ACErrorAccountNotFound,
ACErrorPermissionDenied,
ACErrorAccessInfoInvalid
} ACErrorCode;
(我这里有ACErrorPermissionDenied
)
答案 1 :(得分:11)
我们遇到了同样的问题,并仔细研究了iOS facebook文档广告
https://developers.facebook.com/docs/howtos/ios-6/
我注意到以下段落:
请注意,要使用iOS 6原生身份验证,应用程序需要更改用户请求权限的方式 - 应用必须将其读取和写入权限请求分开。
我必须多次读过那篇文章,但它包含了解决方案:
如果要授予写入(发布访问权限),则必须执行多个访问请求。所以现在我们首先要求获得“电子邮件”的许可以获得读取权限,然后让“publish_action”能够发布到时间线。
答案 2 :(得分:8)
错误消息不明确,因为“app”可能是您的iOS应用程序? Facebook.app在电话上? Facebook应用? “代理应用程序”是Facebook应用程序,“尚未安装”意味着,它在权限方面尚未与Facebook用户联系。
您的Facebook应用首次连接到用户Facebook帐户时,您必须在选项词典的ACFacebookPermissionsKey
键中指定基本信息值。其他Facebook SDK的过去和现在,例如Javascript或PHP库默认提供基本信息作为关键,所以你永远不必。似乎iOS中的本机集成不会这样做,因此,如果用户首次将您的应用程序连接到他们的Facebook帐户而没有提供权限,则会出现此错误。
在您获得访问权限后,即 - 在用户在线隐私设置中将应用程序连接到应用程序后,ACFacebookPermissionsKey
将作为Apple文档,成为可选项。
当您开始尝试使用本机Facebook集成时,这有点令人困惑......
使用本机Facebook集成,您必须提供以下密钥之一,这些密钥是基本信息密钥:email
,user_birthday
或user_location
。
引用Facebook(source):
使用iOS 6原生Auth对话框创建此基本连接, 应用必须请求访问用户的基本个人资料信息 要求提供电子邮件,user_birthday或user_location权限之一。
答案 3 :(得分:0)
在我的某个设备上遇到此错误后(看到正确的,预期的iOS警报视图,要求我批准Facebook访问我的应用):
'Facebook服务器无法满足此访问请求:无效的应用程序ID。'
我终于找到了问题。
虽然最初看起来FB开发者网站上的Facebook应用程序设置有问题,但事实证明我的设备的iOS Facebook帐户不再有与之关联的有效密码 - 当用户将iOS备份恢复到一个新设备。一旦我在设备设置中对其进行了排序,一切都按预期工作。
我在第一个FB权限访问请求中没有遇到任何问题请求'publish_stream' - 我实际上认为这里的真正问题是错误消息是如此随机,以至于它们无法帮助开发人员找到源代码由于Apple和Facebook缺乏统一性,我们遇到了错误!
答案 4 :(得分:0)
除了以上建议之外,还可以尝试的其他一些事情是在facebook.com上检查您的应用设置 -
https://developers.facebook.com/apps/<*APP_ID*>/summary
确保SandBox模式设置为关闭
此外,
在下“选择您的应用与Facebook的整合方式”
<强>选择 - &GT;原生iOS应用程序
保存更改并在一段时间后尝试,因为Facebook可能需要几分钟才能将更改同步到其所有服务器。