8

我正在为我的 iPhone 应用程序使用 Facebook API,并且有两个问题:

所有文档/示例似乎都将所有内容都放在了 appDelegate 中:实例化 Facebook 对象并在 appDidFinishLaunching 中进行授权,并覆盖 application:handleOpenURL 方法。

在我的应用程序中,除非用户导航到特定视图并按下按钮,否则我不希望发生任何事情。我知道在那个视图中,我将实例化 Facebook 对象并在按钮处理程序方法中启动授权,但是如何处理 application:handleOpenURL 的覆盖?我必须使用与我的特定视图控制器中使用的不同的 FB 对象(在我的应用程序委托中实例化)。

  1. 这种情况需要单身吗?或者,让我的 appDelegate 实例化 FB 对象,并在程序中需要它的任何其他地方通过那里访问它是一个很好的设计解决方案?

    在 FB 文档中,他们告诉您覆盖 application:handleOpenURL 方法:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    return [facebook handleOpenURL:url]; 
}
  1. 如前所述,这是否意味着您的应用程序只能打开一种类型的 url?如果您的应用程序需要响应多个,则需要解析 url 参数以确定要采取的操作,对吗?

谢谢!

4

1 回答 1

9

1)两种解决方案都可以。但是使用单例当然更干净,特别是如果您打算在您的应用程序中重用它。

2)application:handleOpenURL method:是在外部调用应用程序的方式 FB sdk 允许从 facebook 应用程序进行身份验证(如果已安装或 safari)。一旦通过身份验证,您的应用程序将使用此处理程序回调。它仅适用于支持多任务处理的设备 。它是简化登录和共享会话的首选方式。但这不是强制性的......应用程序可以支持在应用程序中声明的多个 URL 方案,您可以检查这些方案(未经测试,但应该是这样的):

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
  if ([url.scheme isEqualToString:@"fb<yourid>"])
    return [facebook handleOpenURL:url];
  else {
    // do what you want
    return YES;
  }
}
于 2011-02-22T06:18:54.203 回答