国外第三方登录之facebook(登录,获取用户信息,朋友列表等)含demo

demo地址:http://download.csdn.net/download/ioscircleandcircle/9897852

记得先翻墙,哈哈。

一 facebooK接入及登录官方文档

https://developers.facebook.com/docs/facebook-login/ios


iOS 版 Facebook 登录 — 快速入门

通过 Facebook 登录您的应用时,用户可以向应用授予权限,以便您可以检索信息或以用户的身份在 Facebook 执行操作。

以下步骤用于将 Facebook 登录添加到您的 iOS Objective-C 项目中。要将 Facebook 登录添加到 Swift 项目,请参阅Swift 中的 Facebook 登录 — 新手入门

1. 选择应用或新建应用

选择应用或新建应用,将应用相关信息输入以下代码片段。

2.设置开发环境t

在使用 iOS 版 Facebook 登录之前,先设置您的开发环境。

2a.下载 iOS 版 Facebook SDK

下载 SDK 并将存档解压到  ~/Documents/FacebookSDK。 
(注意,这是 Objective-C 版 SDK。关于 Swift,请参阅  Swift 版 Facebook 登录 — 入门指南。)

2b.向 Xcode 项目添加登录工具包

  1. 打开应用的 Xcode 项目。
  2. 如果您的项目中没有 Frameworks(框架)组,请创建一个。
  3. 打开 ~/Documents/FacebookSDK
  4. 将 FBSDKLoginKit 拖放至项目导航器内的 Frameworks
  5. 在项目中打开 Xcode 的 Build Settings(构建设置)选项卡。
  6. 将 ~/Documents/FacebookSDK 添加到项目的 Framework Search Paths(框架搜索路径)。

您使用 Facebook SDK 时,如果未禁用事件自动记录功能,应用事件将被自动记录和收集,用于 Facebook 分析。关于哪些信息会被收集以及如何禁用事件自动记录的详细信息,请参阅应用事件自动记录

3.在 Facebook 注册和配置您的应用

注册和配置您的应用,以便能够使用 Facebook 登录功能。

3a.添加 Bundle ID

在 Xcode 项目的 iOS 应用对象中,找到 Bundle ID,并将其粘贴到下面的方框内。
Bundle ID
您可以在今后通过设置页面的 iOS 版块更改 Bundle ID。
com.txtws.greenbox

3b.为应用启用单点登录

启用单点登录
将单点登录设置为“是”,即可为应用启用单点登录,如下所示。
单点登录 将从 iOS 通知中启动

4.配置 info.plist

在 Xcode 项目的“Supporting Files”(支持文件)文件夹中找到  .plist 文件。
  1. 右键点击 .plist 文件,然后选择“Open As Source Code”(作为源代码打开)。
  2. 将下列 XML 代码片段复制并粘贴到文件正文中 (<dict>...</dict>)。
    <key>CFBundleURLTypes</key>
    <array>
      <dict>
      <key>CFBundleURLSchemes</key>
      <array>
        <string>fb452454368463124</string>
      </array>
      </dict>
    </array>
    <key>FacebookAppID</key>
    <string>452454368463124</string>
    <key>FacebookDisplayName</key>
    <string>Graybox</string>
    复制代码
  3. 如果您使用任何 Facebook 对话框(例如:登录、分享、应用邀请等),以便从您的应用切换至 Facebook 应用,则您应用的 .plist 还必须处理以下代码。
    <key>LSApplicationQueriesSchemes</key>
    <array>
      <string>fbapi</string>
      <string>fb-messenger-api</string>
      <string>fbauth2</string>
      <string>fbshareextension</string>
    </array>
    复制代码

5.连接应用委托

对于需要切换到原生 Facebook 应用或 Safari 的操作(例如 Facebook 登录或 Facebook 对话框等),要对结果做后处理,您需要将  AppDelegate 类关联到  FBSDKApplicationDelegate对象。要实现这一操作,请将以下代码添加到  AppDelegate.m 文件。
//  AppDelegate.m
#import <FBSDKCoreKit/FBSDKCoreKit.h>

- (BOOL)application:(UIApplication *)application 
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  
  [[FBSDKApplicationDelegate sharedInstance] application:application
    didFinishLaunchingWithOptions:launchOptions];
  // 在此添加任意自定义逻辑。
  return YES;
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url 
    sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {

  BOOL handled = [[FBSDKApplicationDelegate sharedInstance] application:application
    openURL:url
    sourceApplication:sourceApplication
    annotation:annotation
  ];
  // 在此添加任意自定义逻辑。
  return handled;
} 
    
复制代码

6.将 Facebook 登录功能添加到代码中

在您的 iOS 应用中添加 Facebook 登录按钮。

6a.将 Facebook 登录功能添加到代码中

要向应用添加具有 Facebook 品牌特征的“登录”按钮,请将下列代码片段添加至视图控制器。
// 将下列代码添加到文件标头中,例如:在 ViewController.m 中
// 置于 #import "ViewController.h" 之后
#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>

// 将以下代码添加到正文
@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  FBSDKLoginButton *loginButton = [[FBSDKLoginButton alloc] init];
  //或者:将按钮放在视图的中间位置。
  loginButton.center = self.view.center;
  [self.view addSubview:loginButton];
}

@end
复制代码

6b.检查当前登录状态

应用一次只能允许一位用户登录。我们会以  [FBSDKAccessToken currentAccessToken]代表登录应用的每位用户。
FBSDKLoginManager 将为您设置此口令,且在设置  currentAccessToken 时,还会自动将口令写入 keychain 缓存。
FBSDKAccessToken 包含  userID,您可以使用此编号识别用户。如果需要额外的个人主页信息,请参阅 个人主页部分。
您应该更新视图控件,在加载时便检查当前口令。如果用户已经向您的应用授予权限,此操作就会减少不必要的“应用切换至 Facebook”流程:
- (void)viewDidLoad
{
  [super viewDidLoad];
  if ([FBSDKAccessToken currentAccessToken]) {
   // 用户已登录,采取前往下一个视图控制器等操作。 
  }
}
复制代码

6c.请求权限

添加 Facebook 登录后,您的应用就可以向用户请求一些数据的权限。
Facebook“登录”按钮的读取权限
对于 Facebook“登录”按钮 ( FBSDKLoginButton),可使用  readPermissions 属性请求附加的读取权限。
在视图头文件中添加:
//  ViewController.h
#import <FBSDKLoginKit/FBSDKLoginKit.h>
@interface ViewController :UIViewController
@property (weak, nonatomic) IBOutlet FBSDKLoginButton *loginButton;
@end
复制代码
在视图文件中添加:
      
// 扩展“7.添加 Facebook 登录按钮代码”中提供的代码示例
// 在 viewDidLoad 方法中:
loginButton.readPermissions = 
  @[@"public_profile", @"email", @"user_friends"];
复制代码
现在,您的应用即可请求用户的电子邮箱和好友列表。

7.后续步骤

恭喜,您已成功地向 iOS 应用添加了 Facebook 登录功能!请务必参阅文档的其他内容,获取更多进阶指南。

二 facebooK自定义登录按钮

https://developers.facebook.com/docs/facebook-login/ios/advanced


//自定义登陆按钮
- (void)customLogin
{
    UIButton *myLoginButton=[UIButton buttonWithType:UIButtonTypeCustom];
    myLoginButton.backgroundColor=[UIColor darkGrayColor];
    myLoginButton.frame=CGRectMake(0,60,180,40);
   // myLoginButton.center = self.view.center;
    [myLoginButton setTitle: @"My Login Button" forState: UIControlStateNormal];
    
    // Handle clicks on the button
    [myLoginButton
     addTarget:self
     action:@selector(loginButtonClicked) forControlEvents:UIControlEventTouchUpInside];
    
    // Add the button to the view
    [self.view addSubview:myLoginButton];
}
// @[@"public_profile", @"email", @"user_friends"]; 您的应用即可请求用户的电子邮箱和好友列表。
-(void)loginButtonClicked
{
    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
    [login logOut];////这个一定要写,不然会出现换一个帐号就无法获取信息的错误
    [login
     logInWithReadPermissions: @[@"public_profile"]
     fromViewController:self
     handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
         if (error) {
             NSLog(@"Process error");
         } else if (result.isCancelled) {
             NSLog(@"Cancelled");
         } else {
             NSLog(@"Logged in");
             
             [self getUserInfoWithResult:result];
             [self getUserListWithResult:result];
         }
  

三  facebook可以获取的权限

https://developers.facebook.com/docs/facebook-login/permissions


四 facebook获取用户信息

//获取用户信息 picture用户头像
- (void)getUserInfoWithResult:(FBSDKLoginManagerLoginResult *)result
{
    NSDictionary*params= @{@"fields":@"id,name,email,age_range,first_name,last_name,link,gender,locale,picture,timezone,updated_time,verified"};
    
    FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
                                  initWithGraphPath:result.token.userID
                                  parameters:params
                                  HTTPMethod:@"GET"];
    [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
                        NSLog(@"%@",result);
        /*
         {
         "age_range" =     {
         min = 21;
         };
         "first_name" = "\U6dd1\U5a1f";
         gender = female;
         id = 320561731689112;
         "last_name" = "\U6f58";
         link = "https://www.facebook.com/app_scoped_user_id/320561731689112/";
         locale = "zh_CN";
         name = "\U6f58\U6dd1\U5a1f";
         picture =     {
         data =         {
         "is_silhouette" = 0;
         url = "https://fb-s-c-a.akamaihd.net/h-ak-fbx/v/t1.0-1/p50x50/18157158_290358084709477_3057447496862917877_n.jpg?oh=01ba6b3a5190122f3959a3f4ed553ae8&oe=5A0ADBF5&__gda__=1509731522_7a226b0977470e13b2611f970b6e2719";
         };
         };
         timezone = 8;
         "updated_time" = "2017-04-29T07:54:31+0000";
         verified = 1;
         }
         */
    }];
}


五 facebook获取朋友列表

//获取朋友列表
- (void)getUserListWithResult:(FBSDKLoginManagerLoginResult *)result
{
    NSString *token = [FBSDKAccessToken currentAccessToken].tokenString;
    NSLog(@"%@",token);
    FBSDKGraphRequest *requestT = [[FBSDKGraphRequest alloc]
                                   initWithGraphPath:[NSString stringWithFormat:@"%@/friends",result.token.userID]
                                   parameters:@{@"fields":@"uid"}
                                   HTTPMethod:@"GET"];
    [requestT startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
                                           id result,
                                           NSError *error) {
        NSLog(@"friends:%@",result);
        /*
         {
         data =     (
         );
         summary =     {
         "total_count" = 314;
         };
         }
         */
    }];
}


编辑:psj 


猜你喜欢

转载自blog.csdn.net/iOSCircleAndCircle/article/details/75088203