簡介
隨著iOS和微信sdk版本的更新,微信登錄比之前配置麻煩了一些
新版本,需要配置Universal Links,這里就不贅述Universal Links是什么東東了,感興趣的小伙伴可以自行百度一下
配置Universal Links
要做的很簡單,但是這里比較繁瑣,每一步都要小心,容易進坑
1、蘋果開發者賬號配置
登錄自己公司的蘋果開發賬號,選擇Certificates, Identifiers & Profiles選項,按照下圖的1和2順序點擊
進到如下圖頁面,把紅圈里的選項選中狀態
2、Xcode工程配置 打開Associated Domains開關,將Universal Links域名加到配置上(注:只寫域名即可,不帶paths的值,appdelegate里的Universal Links和微信平臺的Universal Links需要域名加paths的值),下圖紅框里
如果沒有Associated Domains選項,則添加。在箭頭處添加
配置URL Types,URL Schemes處填寫在微信開放平臺申請的AppId"
3、配置JSON文件
創建一個空白文件(必須純文本,命名為apple-app-site-association,去除后綴名)。這里建議讓后臺人員在其本地創建,避免文件傳輸時,文件自動被更改格式、后綴自動添加等問題。
內容如下說明:appID的格式為"蘋果賬號的團隊ID.項目的BundleID",注意兩個ID之間的半角符".",不知道蘋果賬號的團隊ID和項目的BundleID在哪的小伙伴看上邊寫的“1、蘋果開發者賬號配置”的圖二,圖二的右上角被紅線遮蓋住的就是TeamId和BundleId,
如果多個項目都用到微信三方登錄,文件中的paths字段對應的value就不要用“*”這個通配符了,用如圖所示的paths起一個項目的名字
4、后臺服務器配置
把文件apple-app-site-association,放置在服務器的根目錄(不要問我,讓后臺自己去理解,我們是最后運維幫助弄的),然后讓他提供一個https的url地址,格式是“正式域名/apple-app-site-association”,如:https://www.baidu.com/apple-app-site-association。
達到的效果是,瀏覽器打開這個地址,可以下載這個文件。另外用GET請求這個地址,返回文件的JSON內容(這里通過工具Postman進行試驗)
注意:返回的數據不能是亂碼,如果是亂碼,則文件不對,最好用編輯器去寫,我用的mac自帶的文本編輯器出錯了!
5、微信開放平臺中去配置,在紅圈里配置
6、導入sdk
cocoapods參考微信開發文檔吧
手動導入這里需要注意:
(1)將 SDK 文件中包含的 libWeChatSDK.a,WXApi.h,WXApiObject.h 三個文件添加到你所建的工程中
(2)開發者需要在工程中鏈接上:Security.framework, CoreGraphics.framework, WebKit.framework。
(3)在你的工程文件中選擇 Build Setting,在"Other Linker Flags"中加入"-ObjC -all_load",在 Search Paths 中添加 libWeChatSDK.a ,WXApi.h,WXApiObject.h
這里會有一個問題,運行的時候會報錯
如果有圖上這個問題,
7、初始化代碼
// 微信SDK注冊,universal link
[WXApi registerApp:APP_ID universalLink: UNIVERSAL_LINK];
補充說明:
如果后臺提供的url地址是https://www.baidu.com/apple-app-site-association。那么,
Associated Domains中填寫applinks:www.baidu.com,
代碼注冊方法及微信開放平臺中都填https://www.baidu.com/
微信文檔中的方法
appdelegate.m文件中實現以下方法
(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [WXApi handleOpenURL:url delegate:self];
}(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [WXApi handleOpenURL:url delegate:self];
}(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler {
return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}
-(BOOL)application:(UIApplication )app openURL:(NSURL )url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> )options{
return [WXApi handleOpenURL:url delegate:self];
}
-(void) onReq:(BaseReq)reqonReq{
}
-(void) onResp:(BaseResp)resp{
}
在需要實現微信按鈕登錄的時候代碼
SendAuthReq req =[[SendAuthReq alloc]init];
req.scope = @"snsapi_userinfo";
req.state = @"123";
//第三方向微信終端發送一個SendAuthReq消息結構
[WXApi sendReq:req completion:^(BOOL success) {
}];
登錄成功時,會回調-(void) onResp:(BaseResp*)resp{
}方法
如果 resp.errCode == 0 則登錄成功
登錄成功以后,想要獲取openid、access_token等,方法為網絡請求https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code
appid為微信三方登錄平臺注冊的AppId,secret為微信三方登錄平臺注冊的secret,需要管理員生成,code為-(void) onResp:(BaseResp*)resp{
}方法回調中的resp.code,根據獲取的openid、access_token,可以利用下面的地址去獲取昵稱等信息https://api.weixin.qq.com/sns/userinfo?access_token=%@&openid=%@,
時間緊就大概寫這么多吧,不對的地方歡迎指正
參考文檔:
http://www.lxweimin.com/p/3a46eb4a107f?from=groupmessage http://www.lxweimin.com/p/8e8840dcd54d