做Facebook的时候,踩过几个坑,这里随便写写,供大家参考
1.首先申请Facebook的开发者账号,这个是首要的
2.导入Facebook第三方登录的Framework(FBSDKLoginKit.framework,FBSDKCoreKit.framework),因为我只用到了他的登录,只需要获取到他的uid,name,email(只限邮箱注册用户)。SDK下载地址
3.下面就要倒入我们的项目了,因为Facebook的framework都比较大,这里我们就不copy进我们的项目了,我们引入就可以了。将上图两个文件放到项目下面,然后打开Xcode,将文件夹拖入项目,选择 Create groups for any added folders。取消选择 Copy items into destination group's folder。这将在 SDK 的安装位置对其进行引用,而不是将 SDK 复制到应用程序中。
如果报错说找不到这个路径,那么需要在Build Settings->Framework Search Paths添加一下该Framework的路径
接着更改plist文件
创建名字为FacebookAppID(string)的键–输入Facebook app ID
创建名字为FacebookDisplayName(string)的键–输入Facebook appDisplay Name
创建名为URL types的键组
创建名为URL Schemes的子项
添加字符串:前缀fb加App ID例如(fb123456)
因为使用了 SDK v4.6.0 或更高版本,所以需要在plist文件中添加
<key>LSApplicationQueriesSchemes<key>
<array>
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
</array>
至此,前期的准备工作完成,下面开始代码了
4.要对 Facebook 登录或 Facebook 对话(或需要切换至原生 Facebook 应用程序或 Safari 的任何操作)的结果进行后置处理,您需要将 AppDelegate 连接到 FBSDKApplicationDelegate。在 AppDelegate.m 中添加:
// AppDelegate.m#import- (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
];
}
记录应用激活
基本的例子是记录应用激活。要执行此操作,请将以下代码片段添加到 AppDelegate.m:
- (void)applicationDidBecomeActive:(UIApplication *)application {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
[FBSDKAppEvents activateApp];
}
5.创建一个按钮,下面我们就写点击事件跳转到Facebook第三方登录
//这个接口需要翻墙
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login logOut];//这个一定要写,不然会出现换一个帐号就无法获取信息的错误
[login
logInWithReadPermissions: @[@"public_profile",@"email",@"user_about_me"]
fromViewController:self
handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
if (error) {
NSLog(@"Process error");
} else if (result.isCancelled) {
NSLog(@"Cancelled");
} else {
NSLog(@"succeed");
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
initWithGraphPath:result.token.userID
parameters:@{@"fields": @"id,name,email"}
HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result,NSError *error) {
// Handle the result
NSLog(@"%@,%@,%@",result[@"id"],result[@"name"],result[@"email"]);
}];
}