iOS第三方登录 —— Facebook

1、 登录

注册Facebook开发者账号,登录Facebook开发者平台

https://www.facebook.com/login/

2、 创建应用

https://developers.facebook.com/docs/app-events/getting-started-app-events-ios#disable-auto-events官网链接

(1)、在App Dashboard界面,点击“My Apps”, 然后创建一个新应用程序(如果您还没有的话)。然后点击左侧的“Settings(设置) >“基本(Basic以查看具有您的App ID,您的App Secret和有关您的应用程序的其他详细信息的“应用程序详细信息面板” 。

(2)、向下滚动到页面底部,然后点击添加平台。选择iOS,添加您的应用程序详细信息,然后保存更改。

通过添加以下详细信息来设置广告应用程序:

应用程序域(App Domains -提供您的应用程序的Apple App Store URL。

隐私权政策网址(Privacy Policy URL-提供隐私权政策网址。必须公开您的应用。

服务条款URLTerms of Service URL-提供服务条款URL。

平台(Platform -滚动到“设置”面板的底部以添加iOS平台。

3、 设置Xcode开发环境

使用 Cocoapod

1、将下列代码添加到 Podfile 中:

pod 'FBSDKLoginKit'

2、在终端窗口的项目根目录中运行以下命令:

$ pod install

4、 配置应用

1、添加Bundle Identifier

2、启用单一登录

5、 配置项目

配置 Info.plist 文件。

右键点击 Info.plist,然后选择Open As(打开方式) Source Code(源代码)或者文本

将下列 XML 代码片段复制并粘贴到文件正文中 (<dict>...</dict>)。

<key>CFBundleURLTypes</key> 

<array> 

    <dict> 

        <key>CFBundleURLSchemes</key> 

            <array>

                 <string>fb[APP_ID]</string>

             </array> 

       </dict>

 </array>

 <key>FacebookAppID</key> 

<string>[APP_ID]</string>

 <key>FacebookDisplayName</key>

 <string>[APP_NAME]</string>

在 [CFBundleURLSchemes] 键内的 <array><string> 中,将[APP_ID]替换为应用编号。

在 FacebookAppID 键内的 <string> 中,将[APP_ID]替换为应用编号。

在 FacebookDisplayName 键内的 <string> 中,将[APP_NAME]替换为应用名称。

如要使用任何 Facebook 对话框(如登录、分享、应用邀请等)以将您的应用切换至 Facebook 应用,您应用程序的 Info.plist 中还需包含:<dict>...</dict>。

<key>LSApplicationQueriesSchemes</key>

<array>

<string>fbapi</string>

<string>fbapi20130214</string> 

<string>fbapi20130410</string>

<string>fbapi20130702</string> 

<string>fbapi20131010</string>

<string>fbapi20131219</string> 

<string>fbapi20140410</string>

<string>fbapi20140116</string>

 <string>fbapi20150313</string>

<string>fbapi20150629</string> 

<string>fbapi20160328</string>

<string>fbauth</string>

<string>fb-messenger-share-api</string> 

<string>fbauth2</string>

<string>fbshareextension</string>

</array>

若是多个应用使用同一Facebook应用编号

 (1)、添加网址格式后缀(URL Scheme Suffix)

(2)、在添加的两个后缀的应用的.plist添加参数FacebookUrlSchemeSuffix

(3)、修改.plist 文件的URL types 下的Facebook里 URL Schemes

6、 配置App Delegate and Scene Delegate

在 AppDelegate 方法中添加以下代码。此代码会在启动应用时初始化 SDK,并在您执行登录或分享操作时,允许 SDK 处理原生 Facebook 应用产生的结果。

Swift

// AppDelegate.swift

import UIKit

import FBSDKCoreKit

@UIApplicationMain

class AppDelegate:UIResponder, UIApplicationDelegate {

func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { ApplicationDelegate.shared.application( application, didFinishLaunchingWithOptions: launchOptions )

return true

}

func application( _ app:UIApplication, open url:URL, options: [UIApplication.OpenURLOptionsKey :Any] = [:] ) -> Bool {

ApplicationDelegate.shared.application( app, open: url, sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String, annotation: options[UIApplication.OpenURLOptionsKey.annotation] )

}

}   

Objective C

// AppDelegate.m

#import <FBSDKCoreKit/FBSDKCoreKit.h>

@import FacebookCore;

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];

return YES;

}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(nonnull NSDictionary *)options { [[FBSDKApplicationDelegate sharedInstance] application:application openURL:url options:options]; return YES;

}

iOS 13 将功能移到了 SceneDelegate 中。如果您使用的是 iOS 13,请将以下方法添加到 SceneDelegate 中,以便登录或分享等功能的操作可按照预期运作(若Xcode中删除了SceneDelegate 可不用配置):

Swift

// SceneDelegate.swift

import FBSDKCoreKit

...

func scene(_ scene:UIScene, openURLContexts URLContexts:Set) {

guard let url = URLContexts.first?.url else { return } ApplicationDelegate.shared.application( UIApplication.shared, open: url, sourceApplication: nil, annotation: [UIApplication.OpenURLOptionsKey.annotation] )

}   

Objective C

// SceneDelegate.m

#import <FBSDKCoreKit/FBSDKCoreKit.h>

@import FacebookCore;

@interface SceneDelegate ()

@end

@implementation SceneDelegate

- (void)scene:(UIScene *)scene openURLContexts:(NSSet *)URLContexts {

UIOpenURLContext *context = URLContexts.allObjects.firstObject; [FBSDKApplicationDelegate.sharedInstance application:UIApplication.sharedApplication openURL: context.URL sourceApplication:context.options.sourceApplication annotation:context.options.annotation];

}  

7、 将登录功能添加到代码里

1、 在您的应用中使用 Facebook 登录按钮

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

要向应用添加具有 Facebook 品牌标识“登录”按钮,请将下列代码片段添加至视图控制器。

// Swift //

// 将下列代码添加到文件的头文件中,例如:在 ViewController.swift 中导入FBSDKLoginKit

// 将下列代码添加到正文类

ViewController:UIViewController {

       override func viewDidLoad() {

            super.viewDidLoad()

             let loginButton = FBLoginButton()

             loginButton.center = view.center

           view.addSubview(loginButton)

      }

}

// Objective-C //

// 将下列代码添加到文件的头文件中,例如:在 ViewController.m 中

// 在 #import "ViewController.h" 之后

#import <FBSDKCoreKit/FBSDKCoreKit.h>

#import <FBSDKLoginKit/FBSDKLoginKit.h>

// 将下列代码添加到正文:

@implementation ViewController

- (void)viewDidLoad {

       [super viewDidLoad];

       FBSDKLoginButton *loginButton = [[FBSDKLoginButton alloc] init];

      // Optional: Place the button in the center of your

       view. loginButton.center = self.view.center; [self.view addSubview:loginButton];

}

@end

此时,您应该能运行应用并使用 Facebook“登录”按钮登录。

2、 自定义“按钮”登录

使用登录管理工具类 (FBSDKLoginManager) 和自定义按钮 (UIButton)调用“登录”对话框

//Swift

let loginManager  = LoginManager()

loginManager.logIn(permissions: ["public_profile"], from: self) { (result, error) in

guard error == nil else { return }

if result?.isCancelled == true {

return GoosPKHUD.shared().showInfoMessage(message: "用户取消了登录".localized)

}

// Objective-C //

 FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];

  [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");

    }

  }];

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容