ios-微信登陸(集成sdk1.8.6遇到的問題)

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容