已查看how to integrate facebook with iOS上的电子书页面,但我一直在寻找的内容有点不同。
我想仅在用户决定分享内容时提示Facbook登录,FB文档中解释的流程通过如何登录(从FB登录处理asyc响应)和显示发布按钮,但我们需要的是显示“发布到FB”按钮,当用户点击时,我希望用户登录,然后进入要发布的内容的预览,然后发布到FB。
我使用FB SDK和iOS 5,难点是如何将FB登录流程直接连接到Post流程。
由于 Elango
答案 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
中所述