ios – FacebookSDK提供两次登录UI

ios – FacebookSDK提供两次登录UI,第1张

概述将iOS 6与FacebookSDK一起使用将读取和发布权限请求分成两个单独的调用.我不确定为什么会有这样的好处,但似乎需要在第一次通过时向用户提供两次Facebook UI. 在我的应用程序中,在用户选择使用Facebook之前,我不会向Facebook请求任何内容,在这种情况下,首先会向他们提供获取读取权限的UI,然后再次获取发布权限.控制从我的应用程序切换到Facebook(读取)回到我的应 将iOS 6与FacebookSDK一起使用将读取和发布权限请求分成两个单独的调用.我不确定为什么会有这样的好处,但似乎需要在第一次通过时向用户提供两次Facebook UI.

在我的应用程序中,在用户选择使用Facebook之前,我不会向Facebook请求任何内容,在这种情况下,首先会向他们提供获取读取权限的UI,然后再次获取发布权限.控制从我的应用程序切换到Facebook(读取)回到我的应用程序,然后立即回到Facebook(发布)然后回到我的应用程序.

这是一种糟糕的用户体验,特别是因为带有“Okay”的facebook屏幕看起来与用户相同. (为什么我要按两次Okay?)

简而言之,我的代码是:

Check for a valID FBSession.activeSessionif not open call FBSession openActiveSessionWithReadPermissionsif successful call FBSession.activeSession reauthorizeWithPublishPermissionsthen publish post

代码有效,但用户体验很糟糕.我错过了什么吗?

解决方法 我的理解是iOS 6需要双重登录才能获得ACAccountStore支持,因此Facebook login tutorial暗示您应该为所有情况执行此 *** 作.将应用程序切换两次是糟糕的用户体验,我想我已经想出了一个解决方案.

首先,对于较旧的iOS(例如iOS 5.0),您可以使用openActiveSessionWithPublishPermissions:并一次性执行读取和发布权限.其次,如果用户从未从“设备设置”登录Facebook,则此同一调用有效.因此,以下代码似乎工作如下:

>如果用户已从设备设置登录Facebook:一个对话框
阅读和一个发布对话框.
>如果用户安装了Facebook应用程序:
切换到FB应用程序一次,连续获得2个提示.
>否则:切换
到Safari一次,并连续获得2个提示

我使用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,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:和其他代码,如login tutorial中所述

总结

以上是内存溢出为你收集整理的ios – FacebookSDK提供两次登录UI全部内容,希望文章能够帮你解决ios – FacebookSDK提供两次登录UI所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/999348.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存