iOS国外第三方登录_ Facebook登录


Facebook接入

1.1官方文档

参考文档

2.1 在配置文件Info.plist中配置应用白名单,必须添加以下所有字段,否则可能无法跳转

  <key>LSApplicationQueriesSchemes</key>
    <array>
    <string>fbapi</string>
    <string>fb-messenger-api</string>
    <string>fbauth2</string>
    <string>fbshareextension</string>
    </array>

2.2点击XCode项目名,选择Info,添加FaceBook的URL Types

identifier:fb URL Schemes:fb前缀后+FaceBook App ID(用户自己申请的账号)


Paste_Image.png

2.3 Appdelegate中的配置

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //facebook
    [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
    [FBSDKSettings setAppID:Facebook_APP_ID];

      return YES;
}
// 2
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
    return  
    [[FBSDKApplicationDelegate sharedInstance] application:application openURL:url sourceApplication:sourceApplication annotation:annotation]
}
// 3
- (void)applicationDidBecomeActive:(UIApplication *)application {

    [FBSDKAppEvents activateApp];
}

2.4 loginFacebook方法

- (void)loginFacebookSuccess:(UIViewController *)viewController success:(void (^)(id response))successBlock failure:(void (^)(NSError *error))failureBlock{
    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];

    [login logOut]; 
 [[FBSDKLoginManager new] logOut];
//这个一定要写,不然会出现换一个帐号就无法获取信息的错误(退出方法)
   
    [FBSDKProfile enableUpdatesOnAccessTokenChange:YES];
    login.loginBehavior = FBSDKLoginBehaviorBrowser; // 优先客户端方式
    [login  logInWithReadPermissions: @[@"public_profile"]
     fromViewController:viewController
     handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
         if (error) {
             NSError *error = [CIAccountError createError:ErrorThirdLoginFailure];
             failureBlock(error);
         } else if (result.isCancelled) {
             NSError *error = [CIAccountError createError:ErrorThirdLoginCancel];
             failureBlock(error);
         } else {
             NSString *token = result.token.tokenString;
             FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
                                           initWithGraphPath:result.token.userID
                                           parameters:nil
                                           HTTPMethod:@"GET"];
             [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
                                                   id result,
                                                   NSError *error) {
                 if (error) {
                     NSError *resultError = [CIAccountError createError:ErrorThirdLoginFailure];
                     failureBlock(resultError);
                 }else{
                     NSString *nickName = [result objectForKey:@"name"];
                     NSString *openId = [result objectForKey:@"id"];
                     NSDictionary *resultDic = @{@"openid":openId,
                                                 @"nickname":nickName,
                                                 @"account_type":@"facebook",
                                                 @"access_token":token,
                                                 @"third_appid":Facebook_APP_ID};
                     successBlock(resultDic);
                 }

             }];
         }
     }];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 官方网址: http://dev.umeng.com/social/ios/operation#2 一、注册友盟账...
    PerhapYs阅读 13,020评论 7 44
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,273评论 19 139
  • 你笑着说了再见 我也笑着转过身去 一切都自然而然 就像 这声再见过后还能再见 改变总是来得悄无声息 再不用在路口期...
    西瓜瓜的日常阅读 467评论 6 6
  • 很久以前养成了随时随地脑补小故事的习惯。对我来说,这是一个致命的习惯。因为在脑补的小故事的世界中,我是世界的中心...
    laserforce阅读 317评论 0 1
  • 羡慕别人,过的很好。 自己却在角落里。
    一个句号阅读 163评论 0 0