如何及时登录iOS应用程序中的Facebook

时间:2012-09-07 03:15:07

标签: iphone ios facebook ipad login

已查看how to integrate facebook with iOS上的电子书页面,但我一直在寻找的内容有点不同。

我想仅在用户决定分享内容时提示Facbook登录,FB文档中解释的流程通过如何登录(从FB登录处理asyc响应)和显示发布按钮,但我们需要的是显示“发布到FB”按钮,当用户点击时,我希望用户登录,然后进入要发布的内容的预览,然后发布到FB。

我使用FB SDK和iOS 5,难点是如何将FB登录流程直接连接到Post流程。

由于 Elango

1 个答案:

答案 0 :(得分:0)

下面是我写的一些代码。如果用户尚未从设备设置登录Facebook,则只需调用openActiveSessionWithPublishPermissions:即可获得更好的用户体验,- (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]; }]; } } }]; } } 可在一个步骤中同时执行读取和发布权限。否则,您只是连续执行这两个权限。只要读取权限成功,就会执行发布权限。

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

hasFacebookInDeviceSettings

hasLoggedInToFacebookInDeviceSettings告诉您此设备是否甚至支持来自设置的Facebook(即这是iOS6 +)。

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

您需要创建自己的{{1}}和其他代码,如login tutorial

中所述