iOS 6 - Facebook共享程序失败,出现错误“代理应用程序尚未安装”

时间:2012-10-02 07:41:31

标签: iphone objective-c facebook ios6

虽然,有这样一个问题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);
    }
}];

这个错误意味着什么?

5 个答案:

答案 0 :(得分:16)

我已经解决了这个问题! 那是因为我没有传递权限数组! 虽然ACAccountStore类声明此参数是可选的,但它不是! enter image description here

应用程序的更多内容可能会启动并要求基本权限(因为它暗示)!

enter image description here

因此,您必须始终传递权限数组。

以下是帐户商店返回的错误代码的说明:

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集成,您必须提供以下密钥之一,这些密钥是基本信息密钥:emailuser_birthdayuser_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应用程序

  • 设置您的Bundle ID
  • 您可以为iPhone / iPad App Store ID设置任何临时整数值
  • 将Facebook登录设置为已启用
  • 列出的平台是原生iPhone应用程序&和/或原生iPad应用程序

保存更改并在一段时间后尝试,因为Facebook可能需要几分钟才能将更改同步到其所有服务器。