Facebook API - 实例化的位置以及如何正确实现handleOpenURL

时间:2011-02-22 06:07:17

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

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

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

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

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

    在FB文档中,它们会告诉您覆盖应用程序:handleOpenURL方法:

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

1 个答案:

答案 0 :(得分:9)

1)两种解决方案都没问题。但是使用单例当然更清晰,特别是如果您打算在整个应用程序中重复使用它。

2)application:handleOpenURL method:是从外部调用应用程序的方法 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;
  }
}