iOS开发:Facebook几个常用方法,登录,个人资料,好友,分享 - Inzaghi-iOS开发博客,互联网资讯,米兰新闻

iOS开发:Facebook几个常用方法,登录,个人资料,好友,分享

 

第一步:认证(Authenticate)

Facebook SDK中较为核心的一个类是FBSession,该类主要用于用户验证、管理用户登陆流程。

在写代码之前,首先需要加入Facebook SDK,在官网下载SDK后,将FacebookSDK.framework加入到工程中,这样我们就可以使用facebook的接口了。

FacebookSDK需要依赖Info.plist中的两个值,分别是FacebookAppID和URL types,如下图所示:

在完成上述工作之后,请求认证就很简单了,代码如下:

  1. void FacebookProxy::login()
  2. {
  3.     if (!FBSession.activeSession.isOpen) {
  4.         // if the session is closed, then we open it here
  5.         [FBSession.activeSession openWithCompletionHandler:^(
  6.                                                              FBSession *session,
  7.                                                              FBSessionState state,
  8.                                                              NSError *error) {
  9.             switch (state) {
  10.                 case FBSessionStateClosedLoginFailed:
  11.                     //TODO handle here.
  12.                     m_isLogined = false;
  13.                     break;
  14.                 default:
  15.                     m_isLogined = true;
  16.                     break;
  17.             }
  18.         }];
  19.     }
  20. }

 

 

Facebook的登陆代码是异步回调的,采用匿名函数的方式处理回调也非常方便。

登出的代码如下:

  1. if (m_isLogined){
  2.     [FBSession.activeSession closeAndClearTokenInformation];
  3. }

 

需要注意的是,玩家应用认证之后,由于是采用浏览器(safari)登陆,会在浏览器缓存中留下access_token,如果要切换用户,需要在浏览器中退出账号,然后再登陆。

 

 

 第二步:获取用户信息

通过第一步认证,已经可以调用facebook接口了,在本文中,主要介绍获取用户信息和好友信息的接口。

获取用户信息的代码如下所示:

void FacebookProxy::loadUserInfo(PlatformUserInfo & info)

  1. {
  2.     [[FBRequest requestForMe] startWithCompletionHandler:
  3.      ^(FBRequestConnection *connection,
  4.        NSDictionary<FBGraphUser> *user,
  5.        NSError *error) {
  6.          if (!error) {
  7.              //TODO
  8.          }
  9.      }];
  10. }

 

 

函数startWithCompletionHandler与认证函数openWithCompletionHandler类似,回调函数的参数user包含了用户的所有信息(包括用户id和用户名等)。

 

 第三步:获取好友信息

同第二步,代码如下:

  1. void FacebookProxy::loadFriends(std::vector<PlatformUserInfo*> & friends)
  2. {
  3.     FBRequest* friendsRequest = [FBRequest requestForMyFriends];
  4.     [friendsRequest startWithCompletionHandler: ^(FBRequestConnection *connection,
  5.                                                   NSDictionary* result,
  6.                                                   NSError *error) {
  7.         NSArray* friends = [result objectForKey:@”data”];
  8.         NSLog(@”Found: %i friends”, friends.count);
  9.         for (NSDictionary<FBGraphUser>* friend_ in friends) {
  10.             NSLog(@”I have a friend named %@ with id %@”, friend_.name, friend_.id);
  11.         }
  12.     }];
  13. }

 

 

 第四步:分享

分享功能是最重要的功能之一,不得不写,然而也没什么值得特殊说明的地方,代码如下所示:

  1. void _share(const char * name,const char * caption, const char * desc, const char * link, const char * picture)
  2. {
  3.     NSMutableDictionary * postParams =
  4.     [[NSMutableDictionary alloc] initWithObjectsAndKeys:
  5.      [NSString stringWithUTF8String:link], @”link”,
  6.      [NSString stringWithUTF8String:picture], @”picture”,
  7.      [NSString stringWithUTF8String:name], @”name”,
  8.      [NSString stringWithUTF8String:caption], @”caption”,
  9.      [NSString stringWithUTF8String:desc], @”description”,
  10.      nil];
  11.     [FBRequestConnection
  12.      startWithGraphPath:@”me/feed”
  13.      parameters:postParams
  14.      HTTPMethod:@”POST”
  15.      completionHandler:^(FBRequestConnection *connection,
  16.                          id result,
  17.                          NSError *error) {
  18.          NSString *alertText;
  19.          if (error) {
  20.              alertText = [NSString stringWithFormat:
  21.                           @”error: domain = %@, code = %d”,
  22.                           error.domain, error.code];
  23.          } else {
  24.              alertText = [NSString stringWithFormat:
  25.                           @”Posted action, id: %@”,
  26.                           [result objectForKey:@”id”]];
  27.          }
  28.          // Show the result in an alert
  29.          [[[UIAlertView alloc] initWithTitle:@”Result”
  30.                                      message:alertText
  31.                                     delegate:nil
  32.                            cancelButtonTitle:@”OK!”
  33.                            otherButtonTitles:nil]
  34.           show];
  35.      }];
  36. }
  37. void FacebookProxy::share(const char * name,const char * caption, const char * desc, const char * link, const char * picture)
  38. {
  39.     if ([FBSession.activeSession.permissions
  40.          indexOfObject:@”publish_actions”] == NSNotFound) {
  41.         //No permissions found in session, ask for it
  42.         [FBSession.activeSession
  43.          reauthorizeWithPublishPermissions:
  44.          [NSArray arrayWithObject:@”publish_actions”]
  45.          defaultAudience:FBSessionDefaultAudienceFriends
  46.          completionHandler:^(FBSession *session, NSError *error) {
  47.              if (!error) {
  48.                  // If permissions granted, publish the story
  49.                  _share(name, caption, desc, link, picture);
  50.              }
  51.          }];
  52.     } else {
  53.         // If permissions present, publish the story
  54.         _share(name, caption, desc, link, picture);
  55.     }
  56. }
 

发表评论

*

* 绝不会泄露


Design By Inzaghi | 京ICP备16047555号-1