1、通過cocoapods導(dǎo)入sdk? ? ? ?pod 'WechatOpenSDK'
sdk 1.8.6 的出現(xiàn),意味著你要配置universal link,這個(gè)東西需要后臺(tái)來完成,一把心酸史啊~

首先,微信開發(fā)平臺(tái)上,先填好Universal links,這個(gè)ul要跟你工程里,注冊微信時(shí)候,填寫一致,才能確保拉起微信
你的appdelegate文件里:
//向微信注冊
? ?[WXApi registerApp:@"你的appid(微信申請應(yīng)用)" universalLink:@"微信應(yīng)用平臺(tái)的ul"];
2、配置xcode
targets? --> info --> URL Types

然后找到info.plist文件中,找到下面截圖,填好,一定要注意,我起初就是將weixinULAPI,打錯(cuò)成weixinUIAPI,導(dǎo)致微信拉不起來,檢查幾遍都沒檢查出來,苦惱了我兩天?。?!此為第一小坑?。。?!

以及info.plist 文件中 設(shè)置App Transport Security Settings 為yes
接下來,需要用到你的蘋果開發(fā)者賬號(hào),為ul配置做準(zhǔn)備了
登陸你的蘋果賬號(hào),https://developer.apple.com/




勾選Associated Domains?
配置好后,回到你的工程里,找到target -->? Signing&Capabilities ,xcode更新之后,只顯示signing,可以點(diǎn)擊上面那個(gè)+,添加Capabilities,這里要注意?。。?!
Domains,填寫域名,前面必須加上applinks:

配置完成。
再來說一下,服務(wù)器配置ul不生效,我們也是拿不到微信授權(quán)返回的數(shù)據(jù)的,不走回調(diào)函數(shù),起初不確定是什么原因,不走回調(diào)函數(shù),找了好久我這邊得問題,這件事真的超級大坑!??!
首先我遇到的問題,就是微信授權(quán),出現(xiàn)了二次彈窗,微信官方文檔也寫明了,出現(xiàn)二次授權(quán)確定彈窗,就要后臺(tái)檢查ul配置問題了。證明ul不生效?。?!
微信開發(fā)文檔:https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/iOS.html
以上配置完成之后,就是走代碼部分了。這里,我也要多說幾句,因?yàn)楸救擞玫膞code11,多了一個(gè)scenedelegate,分屏功能。如果你的app沒有分屏功能,可以將這個(gè)文件刪掉,或者不刪也沒關(guān)系。
然后需要在info.plist中找到Application Scene Manifest選項(xiàng),刪掉

接著,在appdelegate里找到上面這兩段代碼,注釋掉
以上完成了關(guān)閉多窗口的scenedelegate。
這里有一個(gè)問題,就是如果你不注釋掉上面這兩段代碼,運(yùn)行到ios13以上的手機(jī),會(huì)出現(xiàn)黑屏情況。
我遇到的問題,就是三項(xiàng)操作都做了,但是還是出現(xiàn)了黑屏的情況,又是莫名其妙一堆問號(hào),最后發(fā)現(xiàn),刪掉info.plist文件中的Application Scene Manifest選項(xiàng),但是關(guān)掉xcode,打開這個(gè)選項(xiàng)竟然還在??再刪掉,重啟,就好了。這種事情只能是多試。誰也不會(huì)想到,刪掉還在的情況、就像有緩存一樣!
因?yàn)槠鸪跷覄h這個(gè)scenedelegate,出現(xiàn)黑屏,加上當(dāng)時(shí)ul不生效,只能暫時(shí)放棄刪掉scenedelegate的想法,當(dāng)時(shí)的情況是,ios13以下的走appdelegate里微信的回調(diào)函數(shù),ios13的由于ul問題,不走回調(diào),查了好久,各種找問題,找到一篇文章,說在scenedelegate中,多寫一個(gè)函數(shù),- (void)scene:(UIScene*)scenewillConnectToSession:(UISceneSession*)sessionoptions:(UISceneConnectionOptions*)connectionOptions? API_AVAILABLE(ios(13.0)){}
寫上之后,ios13的手機(jī)授權(quán)微信登陸,就走了這里,于是才有了在appdelegate和scenedelegate里分別寫了一套微信登陸。appdelegate里的,供ios13以下使用,scenedelegate里的供ios13及以上使用。
當(dāng)時(shí)用自己的手機(jī)測試沒問題,但是轉(zhuǎn)天拿同事手機(jī)ios13.2測試,竟然不好使了?。?!
測試自己的依然好使,開始以為是ios13.2系統(tǒng)的問題,于是我將自己的手機(jī)(ios13.1.3)的關(guān)機(jī)重啟,發(fā)現(xiàn)也不走回調(diào)函數(shù)了。(有些方、、、)
將工程發(fā)給另一個(gè)同事,他那里也是ios13.1.3,竟然沒事,微信可以正常使用。那個(gè)同事的xcode是11.3,我們又懷疑是不是xcode版本問題,于是又升級xcode為最新版本,還是不行。最后代碼看不出問題,加上ios13也不走回調(diào),就想著再重新將scenedelegate棄用。才有了上面,發(fā)現(xiàn)刪不掉的情況。
至此,刪掉了scenedelegate,又改回用一套微信回調(diào)函數(shù),一切問題都解決了。
真是遇到了好多坑啊~~~~~
代碼部分:AppDelegate
- (BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
//微信注冊
?[WXApi registerApp:@"你的appid(微信申請應(yīng)用)" universalLink:@"微信應(yīng)用平臺(tái)的ul"];
}
#pragma mark - ******************** 微信 ********************
- (BOOL)application:(UIApplication*)applicationhandleOpenURL:(NSURL*)url {
? ? return? [WXApi handleOpenURL:url delegate:self];
}
- (BOOL)application:(UIApplication*)applicationopenURL:(NSURL*)urlsourceApplication:(NSString*)sourceApplicationannotation:(id)annotation {
? ? NSLog(@"跳轉(zhuǎn)回本APP:%@",url);
? ? return [WXApi handleOpenURL:url delegate:self];
}
#pragma mark - ******************** WXApiDelegate ********************
- (void)onResp:(BaseResp*)resp {
? ? /*
?? ? enum? WXErrCode {
?? ? WXSuccess? ? ? ? ? = 0,? ? 成功
?? ? WXErrCodeCommon? ? = -1,? 普通錯(cuò)誤類型
?? ? WXErrCodeUserCancel = -2,? ? 用戶點(diǎn)擊取消并返回
?? ? WXErrCodeSentFail? = -3,? 發(fā)送失敗
?? ? WXErrCodeAuthDeny? = -4,? ? 授權(quán)失敗
?? ? WXErrCodeUnsupport? = -5,? 微信不支持
?? ? };
?? ? */
? ? //微信登錄的類
? ? if([respisKindOfClass:[SendAuthRespclass]]){
? ? ? ? if(resp.errCode==0) {? //成功。
? ? ? ? ? ? //這里處理回調(diào)的方法 。 通過代理吧對應(yīng)的登錄消息傳送過去。
? ? ? ? ? ? SendAuthResp*sresp = resp;
? ? ? ? ? ? NSLog(@"codecodecode%@",sresp.code);
? ? ? ? ? ? [self? ?userToken:sresp.code];
//(這里是拿到code之后,走微信的接口,詳見:https://developers.weixin.qq.com/doc/oplatform/Mobile_App/WeChat_Login/Authorized_API_call_UnionID.html)
? ? ? ? }else{//失敗
? ? ? ? ? ? NSLog(@"error %@",resp.errStr);
? ? ? ? }
? ? }
}
//iOS 13以上版本,進(jìn)行微信相關(guān)操作會(huì)走此回調(diào)
- (BOOL)application:(UIApplication*)applicationcontinueUserActivity:(NSUserActivity*)userActivityrestorationHandler:(void(^)(NSArray<id> * __nullablerestorableObjects))restorationHandler {
? ? if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
? ? ? ? NSURL*webUrl = userActivity.webpageURL;
? ? ? ? NSLog(@"continueUserActivity:%@",webUrl);
? ? }
? ? //處理通用鏈接
? ? //當(dāng)APP被UniversalLink調(diào)起后,
? ? BOOL ret = [WXApi handleOpenUniversalLink:userActivity delegate:self];
? ? NSLog(@"處理微信通過Universal Link啟動(dòng)App時(shí)傳遞的數(shù)據(jù):%d",ret);
? ? return?ret;
}
// NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{
? ? NSLog(@"options 跳轉(zhuǎn)回本APP...url:%@",url);
? ? ? ? ??return [WXApi handleOpenURL:url delegate:self];
}
到這里,微信登陸功能就做好了
再多補(bǔ)充一句:
因?yàn)閕os13.3的深色主題問題,為了防止app受到什么影響,什么字體被隱藏之類的,我關(guān)閉了深色主題
在info.plist文件中,設(shè)置User Interface Style 為,Light? ?即可。
ending