由于當(dāng)前項(xiàng)目需要有FB 、Line 、Twitter、Apple 三方登錄我一一介紹他們的集成步驟和踩的坑
首先是FB登錄
1.申請(qǐng)F(tuán)B賬號(hào)
2.創(chuàng)建應(yīng)用
3.獲取應(yīng)用編號(hào)
4.配置相關(guān)信息
5.xcode配置
6.代碼集成
一、創(chuàng)建應(yīng)用
1.首先需要登錄FB開(kāi)發(fā)者平臺(tái)(https://developers.facebook.com/apps)去構(gòu)建自己的應(yīng)用,你需要有一個(gè)FB的賬號(hào),沒(méi)有的話(huà)需要去注冊(cè)一個(gè).
2.然后添加iOS平臺(tái) - 填寫(xiě)應(yīng)用名稱(chēng) - 創(chuàng)建應(yīng)用編號(hào) - 為應(yīng)用添加產(chǎn)品(FB登錄),然后到設(shè)置中完善相關(guān)信息,然后保存,配置Bundle ID,這些都是按照流程一步步填寫(xiě)
3.配置完成之后你就可以得到xcode中info.plist文件中的配置信息
info.plist填寫(xiě)分成三部分
第一部分填寫(xiě)
URL types 填寫(xiě)自己對(duì)應(yīng)的ID

第二部分填寫(xiě)

第三部分填寫(xiě)

二、xcode配置(接入SDK)
新項(xiàng)目一般推薦Swift package 去添加地址是 https://github.com/facebook/facebook-ios-sdk
去添加

把地址copy進(jìn)去 add

根據(jù)自己實(shí)際情況添加對(duì)應(yīng)的庫(kù) 如果不清楚選哪個(gè)都選上也沒(méi)問(wèn)題就是包會(huì)大點(diǎn)

添加成功會(huì)出現(xiàn)地址

加載時(shí)間比較長(zhǎng)耐心加載 如果加載失敗可以開(kāi)啟翻墻或者修改host來(lái)更新
三、代碼集成
1.Appdelegate中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
///在appdelegate 配置
[[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
if ([url.scheme hasPrefix:@"fb"]) {
return [[FBSDKApplicationDelegate sharedInstance] application:app openURL:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
}
return false;
}
管理一個(gè)Manager去維護(hù)FB登錄登錄邏輯
#import <FBSDKLoginKit/FBSDKLoginKit.h>
以下代碼是登錄邏輯
if (!self.isLogin) {
///public_profile email pages_manage_posts pages_read_engagement pages_read_user_content pages_show_list 對(duì)應(yīng)的獲取的權(quán)限這樣才能
NSArray *scope = @[@"public_profile",
@"email",
@"pages_manage_posts",
@"pages_read_engagement",
@"pages_read_user_content",
@"pages_show_list",
];
FBSDKLoginManager *fbLoginManager = [[FBSDKLoginManager alloc] init];
fbLoginManager.defaultAudience = FBSDKDefaultAudienceEveryone;
FBSDKLoginConfiguration *configuration = [[FBSDKLoginConfiguration alloc] initWithPermissions:scope tracking:FBSDKLoginTrackingEnabled];
[fbLoginManager logInFromViewController:controller
configuration:configuration
completion:^(FBSDKLoginManagerLoginResult * _Nullable result, NSError * _Nullable error) {
if (error) {
handler(nil,error);
} else if(result) {
if (!result.isCancelled) {
BBLAuthResultModel *authResult = [[BBLAuthResultModel alloc] init];
authResult.tokenString = result.token.tokenString;
authResult.userID = result.token.userID;
handler(authResult,nil);
} else {
NSError *error = [NSError errorWithDomain:AuthorizationErrorDomin code:AuthorizationErrorCancelCode userInfo:nil];
handler(nil,error);
}
}
}];
} else {
FBSDKAccessToken *accessToken = [FBSDKAccessToken currentAccessToken];
BBLAuthResultModel *authResult = [[BBLAuthResultModel alloc] init];
authResult.tokenString = accessToken.tokenString;
authResult.userID = accessToken.userID;
handler(authResult,nil);
}