iOS Universal Links 微信三方登錄步驟和坑

簡介
隨著iOS和微信sdk版本的更新,微信登錄比之前配置麻煩了一些


截屏2020-12-30 下午1.38.16.png

新版本,需要配置Universal Links,這里就不贅述Universal Links是什么東東了,感興趣的小伙伴可以自行百度一下

配置Universal Links
要做的很簡單,但是這里比較繁瑣,每一步都要小心,容易進坑
1、蘋果開發者賬號配置
登錄自己公司的蘋果開發賬號,選擇Certificates, Identifiers & Profiles選項,按照下圖的1和2順序點擊


截屏2020-12-30 下午1.43.01.png

進到如下圖頁面,把紅圈里的選項選中狀態
截屏2020-12-30 下午1.48.12.png

2、Xcode工程配置

打開Associated Domains開關,將Universal Links域名加到配置上(注:只寫域名即可,不帶paths的值,appdelegate里的Universal Links和微信平臺的Universal Links需要域名加paths的值),下圖紅框里
截屏2020-12-30 下午1.52.16.png

如果沒有Associated Domains選項,則添加。在箭頭處添加

配置URL Types,URL Schemes處填寫在微信開放平臺申請的AppId
截屏2020-12-30 下午2.06.29.png

截屏2020-12-30 下午2.04.49.png

配置info.plist,“LSApplicationQueriesSchemes“欄添加 "weixin"和"weixinULAPI
截屏2020-12-30 下午2.08.16.png

"
3、配置JSON文件

創建一個空白文件(必須純文本,命名為apple-app-site-association,去除后綴名)。這里建議讓后臺人員在其本地創建,避免文件傳輸時,文件自動被更改格式、后綴自動添加等問題。

內容如下
截屏2020-12-30 下午2.09.48.png
截屏2021-02-26 下午2.28.32.png

說明: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、微信開放平臺中去配置,在紅圈里配置


截屏2020-12-30 下午2.17.32.png

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
這里會有一個問題,運行的時候會報錯


截屏2020-12-30 上午10.29.08.png

如果有圖上這個問題,
截屏2020-12-30 下午2.23.01.png
如圖加入libc++

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容