热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Facebook第三方登录

最近由于项目需要集成Facebook第三方登录,特此写篇博客记录自己在集成过程中遇到的问题。好了,废话不多说,具体的过程如下:首先到Facebook官网注册一个账号,然后创建一个应

最近由于项目需要集成Facebook第三方登录,特此写篇博客记录自己在集成过程中遇到的问题。好了,废话不多说,具体的过程如下:

  • 首先到Facebook官网注册一个账号,然后创建一个应用,创建完应用后将APPID保存,以备后面使用;
  • 点此下载iOS平台的SDK;
  • 集成SDK到项目中,具体操作如下:

1.打开下载的SDK的目录~/Documents/FacebookSDK;

2.拖拽Bolts.framework,FBSDKCoreKit.Framework,
FBSDKLoginKit.Framework,FBSDKShareKit.Framework
到项目的Frameworks组中。在拖拽选项中选择Copy items if needed和Create groups

  • 配置Xcode工程,点击info.plist文件,右键选择Open As Source Code,将如下代码复制即可:

CFBundleURLTypes


CFBundleURLSchemes

fb+APPID



FacebookAppID
APPID
FacebookDisplayName
APP名称

LSApplicationQueriesSchemes

fbapi
fb-messenger-api
fbauth2
fbshareextension

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

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

  • AppDelegate导入import ,并实现FBSDKApplicationDelegate代理方法,具体代码如下:

- (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
];
}
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options {
return [[FBSDKApplicationDelegate sharedInstance] application:app openURL:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
}

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

  • 测试登录(这里采用的是自定义按钮的方式)

1.在需要登录的Controller中导入如下头文件:

#import
#import

2.添加对应的登录代码

FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init];
[loginManager logOut];// 先退出登录
[loginManager logInWithReadPermissions:@[@"public_profile",@"user_friends"] fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {

if (error == nil) {

//登录成功
NSLog(@"===userID%@====token%@",result.token.userID,result.token.tokenString);

FBSDKLoginManagerLoginResult *respOnse= 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[@"name"]);

if (error == nil) {
NSDictionary *picture = result[@"picture"];
NSDictionary *data = picture[@"data"];
NSString *avatar = @"";
if (data[@"url"] != nil && ![data[@"url"] isKindOfClass:[NSNull class]]) {

avatar = data[@"url"];
}
NSString *userName = @"";
if (result[@"name"] != nil && ![result[@"name"] isKindOfClass:[NSNull class]]) {

userName = result[@"name"];
}
NSString *uniOnid= @"";
if (result[@"id"] != nil && ![result[@"id"] isKindOfClass:[NSNull class]]) {

uniOnid= result[@"id"];
}

}else{
[self.view makeToast:[NSString stringWithFormat:@"登录失败,错误码为%ld",error.code] duration:3 position:CSToastPositionCenter];
}

}];

}else{

//登录失败
[self.view makeToast:[NSString stringWithFormat:@"登录失败,错误码为%ld",error.code] duration:3 position:CSToastPositionCenter];
NSLog(@"----%ld",error.code);
}
}];

这里需要注意的是,官网上写的是通过监听拿到对应的头像和姓名等信息,但是在集成过程中发现拿到的信息是nil,所以采用上述方式获取想要的信息.

  • 需要获取的权限

一般情况下,使用第三方登录,只需要public_profile, email and user_friends这三种权限就可以了,此时在app的设置页需要填写联系邮箱才能拥有这些权限。这种情况下,不需要facebook的审核,就可以使用了。
如果你的应用需要请求public_profile, email and user_friends之外的额外需求,在你发布应用之前,Facebook需要进行评审。

至此,Facebook第三方登录就集成完了,如果在集成的过程中有任何问题,欢迎在评论区留言,我会在第一时间给予回复。


推荐阅读
  • 序言Broadcast作为Android的四大组件之一,重要性不言而喻;一般我们使用广播的方式通常如下,继承BroadcastReceiver,新建一个广播类。publicclas ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 其实之前也有下载过完整的android源码,但是从来没有对这个做过一些总结,在加上最近需要经常去看,索性就在从新下载,编译一下,其实这些东西官网上面都有。http:sou ... [详细]
  • 在真实开发中,因为需求是不断变化的,说不定什么时候就需要往模型里添加新的字段,添加新的模型,甚至是大规模的重构; ... [详细]
  • 都会|可能会_###haohaohao###图神经网络之神器——PyTorch Geometric 上手 & 实战
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了###haohaohao###图神经网络之神器——PyTorchGeometric上手&实战相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Swagger2非全局、无需重复输入的Head参数(Token)配置网络上关于Swagger2的教程多如牛毛,作为关于Swagger加入全 ... [详细]
  • JSP 从入门到精通
    .body{textalign:center;}什么是URIURLURN?URI全称统一资源标识符,现在有两个方案,就是URL和URN.URL统一资源定位符,通常由scheme,d ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • Annotation的大材小用
    为什么80%的码农都做不了架构师?最近在开发一些通用的excel数据导入的功能,由于涉及到导入的模块很多,所以开发了一个比较通用的e ... [详细]
  • iOS开发Debug和Release的理解
    2019独角兽企业重金招聘Python工程师标准参考:http:blog.csdn.netmad1989articledetails406580331&# ... [详细]
author-avatar
庾承泓_689
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有