【问题标题】:Facebook API - where to instantiate and how to properly implement handleOpenURLFacebook API - 在哪里实例化以及如何正确实现 handleOpenURL
【发布时间】:2011-07-01 18:32:28
【问题描述】:

我正在为我的 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 参数以确定要采取的操作,对吗?

谢谢!

【问题讨论】:

    标签: ios facebook facebook-graph-api facebook-ios-sdk


    【解决方案1】:

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

    2) application:handleOpenURL method: 是外部调用应用程序的方式 如果安装或 safari,FB sdk 允许从 facebook 应用程序进行身份验证。一旦通过身份验证,您的应用程序将使用此处理程序回调。 它以这种方式工作仅适用于支持多任务处理的设备 这是简化登录和共享会话的首选方式。但这不是强制性的... 一个应用程序可以支持在应用程序中声明的多个 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;
      }
    }
    

    【讨论】:

    • 感谢您的回复。我了解一个应用程序可以 支持多个 URL 方案,但只需添加它们提供的代码,其中 handleOpenURL 方法只返回 [facebook handleOpenURL:] 意味着我的应用程序将无法这样做,对吗?如果我想处理多个 URL,我需要修改他们的示例以分别处理每个 URL,对吗?
    • 更安全地检查 url 是否以 fb 开头,以防您出于某种原因更改您的 id。那你就不用记得在15个地方改了。
    猜你喜欢
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多