1

已经查看了有关如何将 facebook 与 iOS 集成的 facbook 页面,但我一直在寻找的是有点不同。

我只想在用户决定共享内容时提示 Facbook 登录,FB 文档中解释的流程通过如何登录(处理来自 FB 登录的异步响应)并显示发布按钮,但我们需要的是显示“发布到FB”按钮,当用户点击时,我希望用户登录,然后去预览将要发布的内容,然后发布到FB。

我正在使用 FB SDK 和 iOS 5,困难在于如何将 FB 登录流程直接连接到 Post 流程。

谢谢埃兰戈

4

1 回答 1

0

下面是我编写的一些代码。如果用户还没有从设备设置中登录 Facebook,那么只需调用 即可获得更好的用户体验openActiveSessionWithPublishPermissions:,它可以一步完成读取和发布权限。否则,您只需依次执行这两个权限。一旦读取权限成功,您就执行发布权限。

我使用 Facebook SDK 3.2.1 在 iOS6 和 iOS5 设备上测试了这段代码

- (BOOL)hasFacebookInDeviceSettings
{
    ACAccountStore *accountStore = [[ACAccountStore alloc] init];
    ACAccountType *accountTypeFB = [accountStore accountTypeWithAccountTypeIdentifier:@"com.apple.facebook"];
    BOOL hasFacebookBuiltinAccount = (accountTypeFB != nil);
    return hasFacebookBuiltinAccount;
}

- (BOOL)hasLoggedInToFacebookInDeviceSettings
{
    if (![self hasFacebookInDeviceSettings]) {
        return NO;
    }
    BOOL result = [SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook];
    return result;
}

- (void)openFacebookSessionWithAllowLoginUI:(BOOL)allowLoginUI
{
    if (![self hasLoggedInToFacebookInDeviceSettings]) {
        // Simpler if we don't have the built in account
        [FBSession openActiveSessionWithPublishPermissions:@[@"publish_actions"]
                                           defaultAudience:FBSessionDefaultAudienceFriends
                                              allowLoginUI:allowLoginUI
                                         completionHandler:^(FBSession *session,
                                                             FBSessionState state,
                                                             NSError *error) {
                                             [self facebookSessionStateChanged:session
                                                                         state:state
                                                                         error:error];
                                         }];
    }
    else if (!FBSession.activeSession.isOpen) {
        __block BOOL recursion = NO;
        [FBSession openActiveSessionWithReadPermissions:nil
                                           allowLoginUI:allowLoginUI
                                      completionHandler:^(FBSession *session,
                                                          FBSessionState state,
                                                          NSError *error) {
                                          if (recursion) {
                                              return;
                                          }
                                          recursion = YES;
                                          if (error || !FBSession.activeSession.isOpen) {
                                              [self facebookSessionStateChanged:session
                                                                          state:state
                                                                          error:error];
                                          }
                                          else {
                                              assert(FBSession.activeSession.isOpen);
                                              if ([FBSession.activeSession.permissions indexOfObject:@"publish_actions"] == NSNotFound) {
                                                  [FBSession.activeSession requestNewPublishPermissions:@[@"publish_actions"]
                                                                                        defaultAudience:FBSessionDefaultAudienceFriends
                                                                                      completionHandler:^(FBSession *session,
                                                                                                          NSError *error) {
                                                                                          [self facebookSessionStateChanged:session
                                                                                                                      state:FBSession.activeSession.state
                                                                                                                      error:error];
                                                                                      }];
                                              }
                                          }
                                      }];
    }
}

hasFacebookInDeviceSettings告诉您此设备是否甚至从设置中支持 Facebook(即这是 iOS6+)。

hasLoggedInToFacebookInDeviceSettings告诉您用户是否已从 iOS6 Facebook 设备设置登录到 Facebook。

您需要创建自己的facebookSessionStateChanged:代码和其他代码,如登录教程中所述

于 2013-04-18T03:02:22.870 回答