您的位置:首页 > 其它

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

2017-07-13 17:43 756 查看


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 登录 — 入门指南。)
下载
iOS 版 SDK


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

打开应用的 Xcode 项目。
如果您的项目中没有 Frameworks(框架)组,请创建一个。
打开 
~/Documents/FacebookSDK

将 
FBSDKLoginKit
 拖放至项目导航器内的 
Frameworks

在项目中打开 Xcode 的 Build Settings(构建设置)选项卡。
将 
~/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

移除

Save


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

启用单点登录
将单点登录设置为“是”,即可为应用启用单点登录,如下所示。




单点登录将从 iOS 通知中启动

Save




4.配置 info.plist

在 Xcode 项目的“Supporting Files”(支持文件)文件夹中找到 .plist 文件。

右键点击 
.plist
 文件,然后选择“Open As Source Code”(作为源代码打开)。
将下列 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>



复制代码

如果您使用任何 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 的操作(例如
102ef
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 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: