你如何预授权一个 facebook 对话框——比如一个 apprequest?

Posted

技术标签:

【中文标题】你如何预授权一个 facebook 对话框——比如一个 apprequest?【英文标题】:How do you pre-authorize a facebook dialog - like an apprequest? 【发布时间】:2012-09-11 17:47:28 【问题描述】:

我的目标是在我的应用中制作一个邀请朋友的应用请求按钮。

问题是它要求我登录。这通常不是问题,但在这种情况下,用户已经将他们的登录信息输入到 facebook,以便在应用程序中执行另一个功能。该功能是由目前不可用的其他人编写的。

最终发生的是用户必须登录两次。一次使用对方的功能,一次使用apprequest对话框。我需要以某种方式共享凭据/授权/会话,这样我就不会提示用户登录两次。

我没有看到任何要在标准应用请求对话框代码中传递的参数来对尝试进行预授权。我认为我可以用 Facebook 对象做一些事情。另外,我对 Objective C 很陌生,所以我对委托的东西的理解真的很薄弱。我一直在看它,但我不知道 facebook 对象作为委托需要什么样的功能。我的理解是 facebook 可以回调委托,本质上是提供异步 ack 或 req 或类似的东西。但是我怎么知道它期望什么样的代表呢?它会传递什么参数?等等。

无论如何,这是我的应用请求的非常基本的代码块。我不知道从哪里开始,以防止该登录框弹出两次。

Facebook *facebook = [[Facebook alloc] initWithAppId:<#(NSString *)#> andDelegate:<#(id<FBSessionDelegate>)#>]; 
// I realize I have to fill in my own AppID, which I have but I'm not entirely sure about the delegate

NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                               @"Come check out my app.",  @"message",
                               nil];

[self.facebook dialog:@"apprequests" andParams:params andDelegate:nil];

【问题讨论】:

我不确定我是否理解“用户必须登录两次”的意思 - 如果您的应用使用 ios 应用的标准登录流程,您应该能够使用在会话到期之前,所有呼叫都使用相同的访问令牌和/或会话 【参考方案1】:

您需要在您的Facebook 实例上设置accessTokenexpirationDate 属性,以便重用由其他功能创建的会话。您可以使用NSUserDefaults 或类似机制来持久化这些值。

请注意,new version of the Facebook SDK (3.0) 具有更好的自动会话处理能力。在未来的某个时候,它可能是强制性的,所以你应该在有机会时改用它。

【讨论】:

这些成员是 Facebook 对象吗?我最终找到了一个由其他人为这个应用程序编写的帮助函数并与 Facebook 交互。我最终通过运行良好的静态 Facebook 对象调用对话框 - 我认为本质上是共享 accessToken 和 expireDate。

以上是关于你如何预授权一个 facebook 对话框——比如一个 apprequest?的主要内容,如果未能解决你的问题,请参考以下文章

Facebook iOS SDK 3.2.1 授权/确认授权时的空白对话框

授权后未立即调用时,facebook对话框静默失败

Facebook隐私政策不允许消息

Swift:登录时是不是可以避免 Facebook SDK 4.x “您已经授权此应用程序”对话框?

IOS SWIFT:你已经授权了facebook ios

获得用户许可后,如何在 Facebook 的用户墙上发帖?