使用 3.0 SDK 的 Facebook 应用程序

Posted

技术标签:

【中文标题】使用 3.0 SDK 的 Facebook 应用程序【英文标题】:Facebook apprequests with 3.0 SDK 【发布时间】:2013-01-14 01:59:23 【问题描述】:

我正在使用 Facebook ios SDK 3.1.1 并且已经成功集成了很多 Facebook 功能。秉承3.1.1,我使用登录方式

        [FBSession openActiveSessionWithPermissions:permission
                                       allowLoginUI:bAllowLoginUI
                                  completionHandler:^(FBSession *session, FBSessionState state, NSError *error) 
                                  [self sessionStateChanged:session state:state error:error];
        ];

然后我需要发送“apprequests”,并且在 SDK 3.1 中没有新的方法可以实现,所以我必须使用 Facebook 对象和 FBDialog 回退到已弃用的 API。

但是,调用已弃用的对话框函数:

[m_pFacebook dialog:@"apprequests"
           andParams:params
         andDelegate:delegate];

导致弹出 FBDialog 并提示用户通过对话框再次登录。我需要直接进入 apprequests 对话框,而不需要用户再次输入他们的凭据,而且我确信有办法做到这一点,因为我已经看到它在 Diamond Dash 和其他游戏中实现。

我尝试使用 FBSession.activeSession.accessToken 设置 m_pFacebook.accessToken,并且我还确保 m_pFacebook.session 填充了 FBSession 的登录会话

以前有人遇到过这个问题吗?

【问题讨论】:

【参考方案1】:

经过调试,发现Facebook *m_pFacebook对象的expirationDate还没有更新,所以_lastAccessTokenUpdate还在[NSDate distinctPast]中。解决方法是调用

[m_pFacebook fbDialogLogin:session.accessToken expirationDate:session.expirationDate];

当 sessionState 更改为 FBSessionStateOpen 时

- (void) sessionStateChanged:(FBSession*)session state:(FBSessionState)state error:(NSError*)error 
    switch ( state ) 
        case FBSessionStateOpen:
            [m_pFacebook fbDialogLogin:session.accessToken expirationDate:session.expirationDate];
        break;
    

【讨论】:

以上是关于使用 3.0 SDK 的 Facebook 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

使用 Facebook-Android SDK 3.0 正确请求发布权限

无法使用 Facebook SDK 3.0 上传 iOS 应用程序,因为引用了非公共选择器

将群组页面与 Facebook SDK 3.0 集成

在 Android Facebook sdk 3.0 中使用 proguard 时出错

Facebook SDK 3.0 自动登录

如何在不使用 Facebook 登录/注销按钮的情况下以编程方式从 Facebook SDK 3.0 注销?