FaceBook

iOS Facebook 2019集成(登录,获取用户信息,朋友

2019-05-14  本文已影响0人  77小子

准备工作

科学上网

拥有 Facebook 账号

注册成为 [Facebook 开发者](https://developers.facebook.com/)

开发者网站配置

(a)打开开发者网站

(b)点击头像

(c)选择添加新应用

(d)填写名称以及联系邮箱
image image
(e)选中刚刚我们创建的应用

(f)填写隐私权政策网址

(g)保存更改
image
(h)点击开关,修改开发状态

(i)选择我们对应的类别

(j)确认
image

这时,开发状态已经改变,我们可以开始正式集成 Facebook 。

集成 Facebook

更多的我们可能需要参考官方网站 iOS 版 Facebook 登录 — 快速入门

1.初步工作

(a)创建新的 Xcode 项目
(b)pod init
(c)Podfile文件中写下边两段其中一个,在文章最后,我会说一下两种方式的区别。
    (1)
        pod 'FBSDKLoginKit'
    (2)
        pod 'FBSDKCoreKit','~>4.5.1'
        pod 'FBSDKLoginKit','~>4.5.1'
        pod 'FBSDKShareKit','~>4.5.1'
(d)pod install

2.配置项目

(a)右键 info.plis t文件  --> Open As --> Source Code
(b)将官方文档中 XML 代码片段复制并粘贴到文件正文中
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>fb2289137818071827</string> </array> </dict> </array> <key>FacebookAppID</key> <string>2289137818071827</string> <key>FacebookDisplayName</key> <string>现金贷</string>

(c)如要使用任何 Facebook 对话框(例如,登录、分享、应用邀请等),以便从您的应用切换至 Facebook 应用,则您应用程序的 info.plist 还必须包含: 
<key>LSApplicationQueriesSchemes</key> <array> <string>fbapi</string> <string>fb-messenger-share-api</string> <string>fbauth2</string> <string>fbshareextension</string> </array>
image

3.构建设置

前往 Xcode 中的项目导航器,然后选择您的项目以查看项目设置。
选择其他关联工具标记以进行编辑。
将 -ObjC 标记添加到其他关联工具标记,并应用于所有构建目标。

这个东西在哪里设置,我相信应该不需要截图了吧。(偷个懒)

4.项目代码

//  AppDelegate.m
//
#import <FBSDKCoreKit/FBSDKCoreKit.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    [[FBSDKApplicationDelegate sharedInstance] application:application
                             didFinishLaunchingWithOptions:launchOptions];
    [FBSDKSettings setAppID:@"2289137818071827"];
    return YES;
}


- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
    
    BOOL handled = [[FBSDKApplicationDelegate sharedInstance] application:application
                                                                  openURL:url
                                                        sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
                                                               annotation:options[UIApplicationOpenURLOptionsAnnotationKey]
                    ];
    // Add any custom logic here.
    return handled;
}


- (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
                    ];
    // Add any custom logic here.
    return handled;
} 

//  ViewController.m
//
#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    FBSDKLoginButton *loginButton = [[FBSDKLoginButton alloc] init];
    // Optional: Place the button in the center of your view.
    loginButton.center = self.view.center;
    [self.view addSubview:loginButton];
    
    FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init];
    [loginManager logInWithReadPermissions:@[@"public_profile"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
        //NSLog(@"result=%@",result);
        //result.token.userID
        [self getUserInfoWithResult:result];
    }];
}

//获取用户信息 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);
        
        // 下边的部分 是我获取到的信息,剩下的信息可能是因为没有申请到权限吧
        // 现阶段用的开发者账号还是自己的,更多的可能性讲需要注册下来公司的账户,并开通相应的权限
        
//        {
//            "first_name" = Qingfeng;
//            id = 429690791177412;
//            "last_name" = Li;
//            name = "Qingfeng Li";
//            picture =     {
//                data =         {
//                    height = 50;
//                    "is_silhouette" = 0;
//                    url = "https://platform-lookaside.fbsbx.com/platform/profilepic/?asid=429690791177412&height=50&width=50&ext=1560396740&hash=AeQrpS9VqOZQ9-cK";
//                    width = 50;
//                };
//            };
//        }
    }];
}

基本大功告成
这时候,我相信你已经可以运行起来了吧。
同时 Facebook 的授权登录在某种理论上来讲,也没什么问题了。

问题

回到刚刚说的 Podfile 文件问题,为什么会有说这两种方式。
如果你已运行成功并可以授权登录,那么你可以能会发现,无法跳转到 Facebook App中,而是弹出 web 的形式登录授权。
因为 Facebook 觉得跳转的形式体验不好,所以在最新的 SDK 取消了跳转的方式。
不过我们可以通过老版本的 SDK 实现 App 跳转授权。

修改 Podfile 文件

pod 'FBSDKCoreKit','~>4.5.1'
pod 'FBSDKLoginKit','~>4.5.1'
pod 'FBSDKShareKit','~>4.5.1'

TODO

因为开发者账号权限问题,还是有一些功能没有开通。
后续项目正式启动后,会陆续更新文章至完整。

代码地址

代码已更新至 github 地址
如果帮到了你,希望点个🌟🌟🌟star🌟🌟🌟。

上一篇下一篇

猜你喜欢

热点阅读