2010-02-09 49 views
0

我已经做了很多Facebook文档的阅读,但我对会话对象的角色很困惑。例如,与方法:Facebook Connect中的会话对象混淆iPhone

session = [FBSession sessionForApplication:myApiKey secret:myAppSecret delegate:self]; 

那我该怎么办与同时退还给我的会话对象,当想必我需要等待委托回调,以做什么?

其次......在稍后执行我的应用时,当用户授权我在上次执行期间访问他们的帐户时,如何获得对会话对象的引用,以便我可以连接到他们的Facebook帐户并发布信息状态等?文档提到[session resume],但不要说会话引用应该来自哪里。 (并调用[[FBSession会话]恢复]编译,但不起作用。)

谢谢。

回答

2

我应该怎样处理返回给我的会话对象,当然我需要等待委托回调才能做任何事情?

您必须创建并向用户显示FBLoginDialog。在用户登录之前,委托方法不会被调用。它与首先创建会话实例无关。

我怎么得到一个会话对象的引用,这样我就可以连接到他们的Facebook账户

的Facebook连接库将保存在您的应用程序的用户默认的会话信息。你不需要做任何事情来存储它。据我了解,每次启动应用程序时,您应该使用+sessionForApplication:secret:delegate:创建会话对象,然后致电[session resume]。如果FBConnect库找到以用户默认值存储的有效会话,则会返回YES,您可以在用户现在登录时继续。如果resume返回NO,则必须显示登录对话框。

Facebook's docs

会话信息将存储在您的应用程序的首选项的iPhone磁盘上,这样你就不必要求用户登录,每次使用应用程序的时间。创建会话对象后,调用[会话恢复]恢复前一会话。如果会话已过期或您尚未创建会话,则会返回NO,您将不得不要求用户登录。会话在两小时不活动后过期。

+0

你说过,“据我所知,在每次启动应用程序时,都应该使用+ sessionForApplication:secret:delegate创建会话对象,然后调用[会话继续]。”我的问题:有效会话是来自此方法的返回值,还是传递给委托的会话对象?如果是前者,为什么我需要委托人? (由于委托会导致它崩溃,所以传递nil)。如果是后者,返回的会话对象又有什么意义?谢谢。 – 2010-02-09 07:49:55

+0

两者都是相同的对象,因此同样有效。委托方法通常包含委托对象作为参数,以便程序员可以识别委托消息是关于哪个对象。至于你的问题,“为什么我需要一个委托?”:因为创建会话与登录不同。正如我所说,创建会话对象后,你需要调用FBLoginDialog,然后FBSession将使用委托方法在用户实际登录时通知您。此时,您可以继续使用会话。 – 2010-02-09 11:39:19

+0

谢谢...但是如果我知道用户已经登录?那么我不需要显示登录对话框。我不想每次都弹出Facebook对话框(如果我打电话给FBDialog,如果用户已经登录,它会弹出,然后关闭,这会让人分心)。 – 2010-02-09 17:57:48

1

这真的是来自Ole的回答和评论,因为它全部在那里。这就是我所做的。

首先创建会话对象:

facebookSession = [[FBSession sessionForApplication:SESSION secret:SECRET delegate:self]retain];  
[facebookSession resume]; 

第二行设置文件拉动会话数据,让你登录,如果用户指定他们希望保持登录。

您必须实现的方法:

- (void)session:(FBSession*)session didLogin:(FBUID)uid 

虽然我不使用它的任何东西。

要检查,如果用户已经登录,我呼吁:

[[FBSession session] isConnected] 

,然后要么显示登录对话框或直接到发布对话框,如果他们已经登录。