簡介
隨著iOS和微信sdk版本的更新涡扼,微信登錄比之前配置麻煩了一些
新版本呻此,需要配置Universal Links,這里就不贅述Universal Links是什么東東了事扭,感興趣的小伙伴可以自行百度一下
配置Universal Links
要做的很簡單虏束,但是這里比較繁瑣啤斗,每一步都要小心表箭,容易進坑
1、蘋果開發(fā)者賬號配置
登錄自己公司的蘋果開發(fā)賬號钮莲,選擇Certificates, Identifiers & Profiles選項,按照下圖的1和2順序點擊
進到如下圖頁面免钻,把紅圈里的選項選中狀態(tài)
2、Xcode工程配置 打開Associated Domains開關崔拥,將Universal Links域名加到配置上(注:只寫域名即可极舔,不帶paths的值,appdelegate里的Universal Links和微信平臺的Universal Links需要域名加paths的值)握童,下圖紅框里
如果沒有Associated Domains選項姆怪,則添加。在箭頭處添加
配置URL Types,URL Schemes處填寫在微信開放平臺申請的AppId"
3稽揭、配置JSON文件
創(chuàng)建一個空白文件(必須純文本,命名為apple-app-site-association肥卡,去除后綴名)溪掀。這里建議讓后臺人員在其本地創(chuàng)建,避免文件傳輸時步鉴,文件自動被更改格式揪胃、后綴自動添加等問題。
內容如下說明:appID的格式為"蘋果賬號的團隊ID.項目的BundleID",注意兩個ID之間的半角符"."氛琢,不知道蘋果賬號的團隊ID和項目的BundleID在哪的小伙伴看上邊寫的“1喊递、蘋果開發(fā)者賬號配置”的圖二,圖二的右上角被紅線遮蓋住的就是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參考微信開發(fā)文檔吧
手動導入這里需要注意:
(1)將 SDK 文件中包含的 libWeChatSDK.a哈肖,WXApi.h吻育,WXApiObject.h 三個文件添加到你所建的工程中
(2)開發(fā)者需要在工程中鏈接上: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";
//第三方向微信終端發(fā)送一個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.reibang.com/p/3a46eb4a107f?from=groupmessage http://www.reibang.com/p/8e8840dcd54d