Facebook第三方登录

来源:简书 分类: 文章浏览史 发布时间:2021-04-09 21:45:20 最后更新:2021-04-09 浏览:349
转载声明:
本文为摘录自“简书”,版权归原作者所有。
温馨提示:
为了更好的体验,请点击原文链接进行浏览
摘录时间:
2021-04-09 21:45:20

1.集成并测试facebook

1.注册开发者账号

登陆facebook开发者平台 (https://developers.facebook.com/), 注册facebook开发者账号。

2.创建应用

  • 2.选择iOS平台
  • 3.输入APP的名称,选择Create New Facebook App ID
  • 4.选择APP类别,点击创建应用编号。

3.下载SDK

在该界面中点击按钮下载SDK,或者在
https://developers.facebook.com/docs/ios中下载iOS平台的SDK。

4.配置APP在facebook中的信息

  • 1.点击右上角My Apps,进入Dashboard界面。
    此时可以看到AppID和AppSecret,记住这两个值,之后要用到。(如果AppSecret是加密的话,点击旁边的show即可看到值)
  • 2.点击Dashboard左边的Settings选项,点击+ Add Platform



  • 3.选择iOS平台。



  • 4.输入Bundle ID。
  • 5.设置Single Sign(单点登录)为on。
  • 6.选择是否打开自动记录 iOS 应用内购买事件(选填)
  • 7.点击保存Save Changes



4.集成SDK到XCode中

  • 1.在项目中新建名称为FrameworksGroup
  • 2.打开下载的SDK的目录 ~/Documents/FacebookSDK
    并拖拽
    Bolts.framework
    FBSDKCoreKit.Framework,
    FBSDKLoginKit.Framework,
    FBSDKShareKit.Framework

    到项目的Frameworks组中。在拖拽选项中选择Copy items if neededCreate groups

5.配置Xcode工程

右键点击Info.plist文件,选择Open As Source Code

5.1.设置URLSchemes
  • 复制粘贴以下片段到XML的body中<dict>...</dict>
<key>CFBundleURLTypes</key>
<array>
  <dict>
  <key>CFBundleURLSchemes</key>
  <array>
    <string>fb{your-app-id}</string>
  </array>
  </dict>
</array>
<key>FacebookAppID</key>
<string>{your-app-id}</string>
<key>FacebookDisplayName</key>
<string>{your-app-name}</string>

将 fb{your-app-id} 替换为 Facebook 应用编号,加上前缀 fb。例如,fb123456。您可以通过 Facebook 应用面板找到应用编号。

使用应用编号替换 {your-app-id}

使用您在应用面板中指定的显示名称替换 {your-app-name}

5.2.Facebook加入网络白名单
  • iOS9要配置App Transport Security,把Facebook加入白名单,打开Info.plist,添加以下片段。
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>facebook.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
        <key>fbcdn.net</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
        <key>akamaihd.net</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
    </dict>
</dict>
5.3.设置应用跳转白名单
  • 如果使用了facebook的登陆分享功能,需要跳转到facebook的APP,同样也要在.plist文件中处理一下。
<key>LSApplicationQueriesSchemes</key>
<array>
  <string>fbapi</string>
  <string>fb-messenger-api</string>
  <string>fbauth2</string>
  <string>fbshareextension</string>
</array>

6.添加系统资源库

点击target->General->Linked Frameworks and Libraries,点击左下角的+号按钮,依次添加以下系统资源库

Security.framework
libiconv.dylib
SystemConfiguration.framework
CoreGraphics.Framework
libsqlite3.dylib
CoreTelephony.framework
libstdc++.dylib
libz.dylib
Accounts.framework

7.连接Application Delegate

在facebook登录或者分享过程中,会打开facebook APP或者跳转到Safari,此时要要连接AppDelegateFBSDKApplicationDelegate。在AppDelegate.swift中添加以下代码:

#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 {
  return [[FBSDKApplicationDelegate sharedInstance] application:application
    openURL:url
    sourceApplication:sourceApplication
    annotation:annotation
  ];
}

swift版本

import FBSDKCoreKit
import FBSDKLoginKit

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}

@available(iOS 9.0, *)
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {        
    return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, options: options)
}
// iOS8
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
    return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}

8.打开Keychain(很重要)

Xcode8iOS 10 的情况下,还需要做一步操作,那就是打开Keychain
在Xcode左侧导航栏最上面,点击“项目名称”,在右侧面板中选择Capabilities,在下面找到Keychain Sharing,点击ON按钮。

Keychain.png
9.添加应用程序事件(Events)(非必选)

当用户安装或者使用APP的时候,有些事件数据可以被统计,可以在facebook的分析面板中查看 (https://www.facebook.com/analytics?__aref_src=devsite&__aref_id=docs_ios_getting_started).

记录APP激活,在AppDelegate.m添加以下代码:

//  AppDelegate.m
#import <FBSDKCoreKit/FBSDKCoreKit.h>
- (void)applicationDidBecomeActive:(UIApplication *)application {
  [FBSDKAppEvents activateApp];
}

swift代码:

func applicationDidBecomeActive(application: UIApplication) {
    FBSDKAppEvents.activateApp()
}

10.测试登陆

1.导入头文件

swift项目中,在桥接文件中添加导入头文件代码。如果是objc的话,在你的ViewController.mAppdelegate.m中导入头文件。

#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>
2.添加相应代码
  • 1.在ViewController.swift中的viewDidLoad方法中添加以下代码:
let loginBtn: FBSDKLoginButton = FBSDKLoginButton()
loginBtn.center = self.view.center
view.addSubview(loginBtn)
  • 2.现在编译并运行你的APP,就可以看到facebook的登陆按钮。
Facebook登录按钮
  • 3.点击登录按钮,就会跳转到登录界面:
facebook登录页面

10.自定义登录按钮

大多数情况下,我们希望能够自定义facebook的登陆按钮,在按钮的点击事件方法中,写入以下代码:

/// 按钮监听方法
func facebookBtnClick() {
    
    // 打开 FBSDKProfile 自动追踪 FBSDKAccessToken
    FBSDKProfile.enableUpdates(onAccessTokenChange: true)
    // 清空FBSDKAccessToken
    FBSDKAccessToken.setCurrent(nil)
    
    // 登录
    let loginManager: FBSDKLoginManager = FBSDKLoginManager()
    loginManager.logOut() // 先退出登录
    loginManager.loginBehavior = .native // 优先客户端方式
    loginManager.logIn(withReadPermissions: ["public_profile"], from: self) { (result, error) -> Void in
        
        guard let res = result else {
            return
        }
        
        if error != nil {
            print("Process error")
        } else if res.isCancelled {
            print("Cancelled")
        } else {
            // 获取userID和token
            print("userID: \(res.token.userID), token: \(res.token.tokenString)")
            print("FBSDKProfile.current(): \(FBSDKProfile.current())")
        }
    }
}

如果想要进一步获取用户信息,比如用户名和头像等,需要添加通知,监听用户登录获取。

override func viewDidLoad() {
    super.viewDidLoad()
    
    NotificationCenter.default.addObserver(
        forName: NSNotification.Name.FBSDKProfileDidChange,
        object: nil, queue: nil) { (Notification) in
            
            // 进一步获取用户信息
            if let profile = FBSDKProfile.current() {
                print("profile.userID: \(profile.userID)")
                print("profile.name: \(profile.name)")
                let url = profile.imageURL(for: FBSDKProfilePictureMode.normal, size: CGSize(width: 200, height: 200))
                print("url: \(url)")
            }
    }
}

/// 移除监听
deinit {
    NotificationCenter.default.removeObserver(self, name: NSNotification.Name.FBSDKProfileDidChange, object: nil)
}

11. 登录评审

一般情况下,使用第三方登录,只需要****public_profile, email and user_friends****这三种权限就可以了,此时在app的设置页需要填写联系邮箱才能拥有这些权限。这种情况下,不需要facebook的审核,就可以使用了。

如果你的应用需要请求public_profile, email and user_friends之外的额外需求,在你发布应用之前,Facebook需要进行评审。

注意:只能是注册应用的开发者账号才能做分享,如果要所有的账号都可以使用的话,需要把注册的应用提交给facebook审核通过,至于如何审核,请看下面的审核流程!

参考

php技术微信