【问题标题】:iOS 6 - Facebook sharing procedure fails with error "The proxied app is not already installed"iOS 6 - Facebook 共享过程失败,并出现错误“代理的应用程序尚未安装”
【发布时间】:2012-09-12 00:19:25
【问题描述】:

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

这个错误是什么意思?

【问题讨论】:

  • 你能告诉 self.facebookAccount 是哪种类型.. 我必须如何声明@Stas
  • 当然,facebookAccount 的类型是 ACAccount,你可以这样声明:@property (strong, nonatomic) ACAccount * facebookAccount;
  • 好的,谢谢。现在我收到此错误 Facebook 服务器无法满足此访问请求:代理应用程序无法请求发布权限,而无需事先安装。 @斯塔斯
  • 看看这个 q-a,这里是关于如何调整你的 fb 应用程序的完整指南facebook.stackoverflow.com/questions/12644229/…
  • 查看我对类似问题的帖子的回复 - stackoverflow.com/questions/12686277/…

标签: iphone objective-c facebook ios6


【解决方案1】:

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

更多的应用程序可以启动并请求基本权限(这是暗示的)!

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

这里也是账户商店返回的错误码的描述:

typedef enum ACErrorCode {
   ACErrorUnknown = 1,
   ACErrorAccountMissingRequiredProperty,
   ACErrorAccountAuthenticationFailed,
   ACErrorAccountTypeInvalid,
   ACErrorAccountAlreadyExists,
   ACErrorAccountNotFound,
   ACErrorPermissionDenied,
   ACErrorAccessInfoInvalid
} ACErrorCode;

(我这里有ACErrorPermissionDenied

【讨论】:

  • 只有当用户第一次连接到您的应用程序时(从 Facebook 的角度来看,而不是设备),这才会成为问题。请看我的回答。 stackoverflow.com/a/12851955/662605
【解决方案2】:

在仔细查看 iOS facebook 文档广告后,我们遇到了同样的问题

https://developers.facebook.com/docs/howtos/ios-6/

我注意到以下段落:

注意,要使用 iOS 6 原生身份验证,应用程序需要更改它们向用户请求权限的方式 - 应用程序必须将它们对读取和写入权限的请求分开。

我一定已经读过好几遍了,但它包含了解决方案:

如果您想授予写入权限(发布访问权限),您必须多次请求访问权限。所以现在我们首先请求“电子邮件”权限以获得阅读权限,然后请求“发布操作”才能发布到时间线。

【讨论】:

  • 是的,通常是在应用启动时获得基本权限,然后在用户实际尝试使用共享程序时获得高级权限
  • thnx ... 它帮助了我 :) +1
【解决方案3】:

错误消息不清楚,因为“应用程序”可能是您的 iOS 应用程序?手机上的 Facebook.app?脸书应用? “代理应用”是 Facebook 应用,“尚未安装”是指在权限方面尚未与在线 Facebook 用户关联。

您的 Facebook 应用第一次连接到用户 Facebook 帐户时,您必须在选项字典的 ACFacebookPermissionsKey 键中指定基本信息值。其他 Facebook SDK 的过去和现在,例如 Javascript 或 PHP 库,默认提供基本信息作为密钥,因此您不必这样做。 iOS 中的本机集成似乎没有这样做,因此,如果当用户第一次将您的应用连接到他们的 Facebook 帐户而没有提供任何权限时,您会收到此错误。

在您获得访问权限后,即 - 用户在其在线隐私设置中连接到应用程序后,ACFacebookPermissionsKey 会按照 Apple 文档的方式进行操作,变为可选。

当您开始尝试使用原生 Facebook 集成时,您会感到有些困惑......

使用原生 Facebook 集成,您必须提供以下基本信息键之一:emailuser_birthdayuser_location

引用 Facebook (source):

要使用 iOS 6 原生身份验证对话框创建此基本连接, 应用程序必须通过以下方式请求访问用户的基本个人资料信息 请求电子邮件、user_birthday 或 user_location 权限之一。

【讨论】:

  • 是的,我知道。问题是引号中的文本在我遇到这个问题之后被添加到 Facebook 文档中)。实际上,在重新阅读教程三天后,我在文档中发现了这一点)
【解决方案4】:

在我的一台设备上遇到此错误后(在看到正确的、预期的 iO​​S 警报视图要求我批准 Facebook 访问我的应用程序后):

“Facebook 服务器无法完成此访问请求:应用程序 ID 无效。”

我终于找到了问题所在。

虽然最初似乎是 FB 开发者网站上的 Facebook 应用程序设置存在问题,但事实证明,我设备的 iOS Facebook 帐户不再具有与之关联的有效密码 - 当用户将 iOS 备份恢复到一个新设备。一旦我在我的设备设置中对其进行了排序,一切都会按预期工作。

我在第一个 FB 权限访问请求中请求 'publish_stream' 时没有遇到任何问题 - 我实际上认为这里真正的问题是错误消息非常随机,以至于它们无法帮助开发人员找到源由于 Apple 和 Facebook 缺乏团结,我们遇到了错误!

【讨论】:

    【解决方案5】:

    除了上述建议之外,还有一些可以尝试的方法是在此处检查您在 facebook.com 上的应用设置 -

    https://developers.facebook.com/apps/<*APP_ID*>/summary
    
    • 确保沙盒模式设置为关闭

      还有,

      “选择您的应用如何与 Facebook 集成”下

      选择->原生 iOS 应用

    • 设置您的捆绑 ID
    • 您可以为 iPhone/iPad 应用商店 ID 设置任何临时整数值
    • 将 Facebook 登录设置为启用
    • 列出的平台是原生 iPhone 应用和/或原生 iPad 应用

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多