一直覺得自己寫的不是技術(shù)菩浙,而是情懷迎罗,一個個的教程是自己這一路走來的痕跡睬愤。靠專業(yè)技能的成功是最具可復制性的纹安,希望我的這條路能讓你們少走彎路尤辱,希望我能幫你們抹去知識的蒙塵,希望我能幫你們理清知識的脈絡(luò)厢岂,希望未來技術(shù)之巔上有你們也有我光督。
發(fā)現(xiàn)一個天大的秘密,我當時在2021.7.2號寫的QQ登錄沒有問題的 結(jié)果到了2021.7.5號發(fā)現(xiàn)登錄不了塔粒,原因是我在2021.7.2號的時候修改過QQ開放平臺里面的信息结借,然后看到驗證通過了。如果馬上生效的話2021.7.2號應該是不能登錄的卒茬,結(jié)果到2021.7.5號星期一運行才發(fā)現(xiàn)登錄不了船老,證明資料的更新有一定的延時
首先,這個問題我在網(wǎng)上搜索了很多資料扬虚,都沒有最終的解決辦法努隙,后來根據(jù)自己的實際情況自己想了好久,終于解決了辜昵,
我當時用的是微信的SDK版本是1.8.9荸镊,由于IOS 9之后需要用通用鏈接。
出現(xiàn)這個BUG我打算用開發(fā)的時間順序來去詳細說明一下,我當時在開發(fā)公司的項目的時候呢躬存,首先沒有問產(chǎn)品經(jīng)理去拿蘋果開發(fā)者賬號张惹,配置證書,配置IDS岭洲,配置項目描述文件宛逗,上微信開發(fā)平臺填寫信息,就去開發(fā)項目盾剩。(以后開發(fā)公司新項目前要做好這些工作再去開發(fā)是最好的雷激,為什么呢?)
因為:我當時新建了個項目用的證書就是上一家公司的證書(假如:abc)告私,boundleID是現(xiàn)在公司的boundleID(假如:123)屎暇,這樣子的話,boundleID的IDS文件就會生成在上一家公司了(abc)驻粟。到時候現(xiàn)在的公司開發(fā)者賬號給我們配置上架的話就不能用現(xiàn)在公司的boundleID(123)根悼,生成的時候回提示重復命名的,所以就會造成很大的麻煩蜀撑,如果你無法在上一家公司的開發(fā)者賬號里面刪掉這個IDS文件就用不了現(xiàn)在公司的boundleID(123)挤巡,只能重命名一個了(假如:456)。我當時就不管他酷麦,一直用上一家公司的證書(abc)矿卑,然后就做第三方微信登錄,在開放平臺填的信息是boundleID(123)贴铜,然后填通用鏈接 當時我通用鏈接是按照格式亂填的(假如:zxc)粪摘,真正的通用鏈接我還沒有做出來,畢竟沒有公司的開發(fā)者賬號绍坝,沒有生成IDS和Appid衅金,無法做通用鏈接粟誓。就這樣我就開始做微信的第三方登錄狂魔,結(jié)果就這樣搞好了微信的第三方登錄和微信分享侠讯。
等項目準備上架的時候,我在去問公司拿開發(fā)者賬號把介,去搞證書勤讽,配置IDS,跟填寫App的上架信息拗踢。配置IDS的時候我無法用現(xiàn)在公司的boundleID(123)脚牍,所以自己重新命名一個boundleID(456),然后證書巢墅,IDS(456),App填寫資料完成了诸狭。然后就去搞通用鏈接券膀。
通用鏈接的整個步驟我會在寫一篇文章詳細說明。
那么我的通用鏈接搞好之后驯遇,我就去微信開發(fā)平臺上面去修改BounleID(改為456)和通用鏈接(url)芹彬,結(jié)果去驗證微信的登錄的時候發(fā)現(xiàn)登錄都登錄不了,分享更加分享不了叉庐。我首先還以的是boundleID對不上舒帮,所以就把之前備份的微信登錄的代碼拿出來運行看看是否能登錄,結(jié)果發(fā)現(xiàn)真的能登錄陡叠,備份的微信登錄代碼的boundleID 是(123),但問題是我已經(jīng)把微信開放平臺的boundleID已經(jīng)修改了(456),不可能微信開放平臺新修改的信息沒有生效吧玩郊,如果要把boundleID 修改回(123)的話,在微信開發(fā)平臺修改就簡單了匾竿,改一下就可以瓦宜,問題是項目用123的boundID的證書對應是上一家公司的證書(abc),而且IDS岭妖,項目配置文件,填寫的Apps信息都是用boundleID(456)...............
哎反璃,沒有辦法昵慌,換就換啦,鬼叫現(xiàn)在登錄不了..........
更換了IDS之后我發(fā)現(xiàn)淮蜈,仍然登錄不了哦斋攀,這就奇怪了。然后我有運行之前備份的微信登錄代碼能夠登錄梧田,新的準備上架的代碼大家都是同樣的boundleID登錄不了淳蔼,說明不是boundleID的問題了。所以boundleID換不換都沒有問題裁眯。
哪新的代碼多了什么呢鹉梨?
到了中午吃飯的時候,整個第三方的登錄跟分享沒有進展穿稳,想不到怎么去解決存皂。后來下午上班的時候我想了一下,以前在(拿貨)工作的時候用就得SDK不需要做通用鏈接的那種逢艘,都能登錄跟分享旦袋,怎么現(xiàn)在換了最新的SDK就不行呢,想了想它改,我的BoundleID已經(jīng)換回來的疤孕,微信開發(fā)平臺的BoundleID跟項目的BoundleID已經(jīng)是一致。剩下的就是通用鏈接的問題了央拖,所以我做了個決定祭阀,把項目的最新的SDK移除它鹉戚,用舊的SDK(不需要通用鏈接的那種)。結(jié)果能夠登錄跟分享柬讨。開始看到曙光了崩瓤。證明確實去通用鏈接的問題。
通用鏈接踩官。我當時亂寫了一個通用鏈接的却桶,不過現(xiàn)在做好了通用鏈接不可能修改為亂寫的那個吧,我還是試試蔗牡。微信開放平臺用的是真正能用的那個(url)颖系,只是代碼修改為之前亂寫的那個(zxc)結(jié)果運行報錯。
說明什么呢辩越?微信第三放登錄的時候嘁扼,微信開放平臺填的通用鏈接要跟代碼里面的通用鏈接要一致,不管你是亂填的還是寫個真正能用的黔攒,最重要的是一致趁啸。(重點:我說的亂填,也要按照微信開放平臺的鏈接格式來填的例如:https://nahuoshangcheng/app/督惰,不然你也無法保存)
所以不傅,我把代碼的鏈接修改為跟開放平臺一樣的通用鏈接。就是真正能用的鏈接赏胚。這個步驟是對的访娶。結(jié)果程序崩掉(不能登錄),為什么呢觉阅。還有一個地方崖疤。
我把這個地方刪掉它重新運行一下,發(fā)現(xiàn)可以登錄了典勇。其實應該還有有問題的劫哼,如果使用通用鏈接的話這個步驟還是必須要填的,但是為什么反而不填就能登錄痴柔。填了反而出問題沦偎,不填寫代理的回調(diào)方法是這個:
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
后來上去網(wǎng)上找了一下,人家用通用鏈接回調(diào)得代理是下面的這個的咳蔚。結(jié)果我換成下面的這個代理豪嚎。有回調(diào)了,
-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler NS_AVAILABLE_IOS(8_0);
然后我再次把通用鏈接補上谈火,因為微信的SDK1.8.9的通用鏈接的做法一定要補上的侈询,
注意證書配置哪里也要記得打開按鈕
最終得到一個啟迪的是什么呢?如果做第三方微信登錄的話糯耍。其實通用鏈接做不做都是無所謂的扔字,你亂填一個都是可以的囊嘉,亂填也要按照微信的格式去填 例如:https://nahuoshangcheng/app/ 不然你也無法保存。那么登錄成功的回調(diào)AppDelegte里的代理方法就是
重點:重點:重點 SDK要支持通用鏈接例如我現(xiàn)在用的是SDK1.8.9
如果你亂填一個通用鏈接的話革为,會走下面的代理方法扭粱。
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{
if ([url.host isEqualToString:@"qzapp"]) {//騰訊
return [TencentOAuth HandleOpenURL:url];
}else if ([url.host isEqualToString:@"oauth"]) { //微信
return [WXApi handleOpenURL:url delegate:self];
}else if ([url.host isEqualToString:@"response"]){//微博
return [WeiboSDK handleOpenURL:url delegate:self];
}
return YES;
}
如果用了真正能用的通用連接的話 AppDelegte的代理方法就是
-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler NS_AVAILABLE_IOS(8_0); {
if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
NSURL *url = userActivity.webpageURL;
if([[NSString stringWithFormat:@"%@",url] rangeOfString:@"oauth"].location !=NSNotFound){
//微信登錄
return [WXApi handleOpenURL:url delegate:self];
}else if ([[NSString stringWithFormat:@"%@",url] rangeOfString:@"tencent"].location !=NSNotFound){
//QQ登錄
return [TencentOAuth HandleUniversalLink:url];
}
}
return YES;
}
其實我還有一個很舊的微信SDK,這個SDK是iOS9 之前的震檩,當時還有出通用鏈接的概念的琢蛤,如果用這個SDK的話,微信開放平臺的通用鏈接亂填一個抛虏,到時候代碼里面注冊微信信息的時候不用填通用鏈接的博其,例如下面的代碼:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[WXApi registerApp:AppID universalLink:Links];
return YES;
}
用這個SDK集成的話,直接微信登錄迂猴,分享慕淡,支付都沒有通用鏈接的概念的 不用煩這個通用鏈接的問題。
SDK下載了鏈接后面補上沸毁。
總結(jié):PBItemCollectionServicer connection disconnected.
這個BUG的可能性:
1.開發(fā)平臺上填寫的通用鏈接要跟代碼的通用鏈接一定要一致(不一致會提示通用鏈接校驗失敗的)
2.通用鏈接必須能用的峰髓,不能亂填。怎么能不能用呢息尺。我上面有文章跳去制作過程的儿普。如果能用AppDeleegte的代理方法會跳去
-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler NS_AVAILABLE_IOS(8_0);
然后里面返回的rul 打印的信息包含你的通用鏈接地址:code值,wechat_auth_token信息等 例如:
4.開發(fā)者賬號的ADS證書 按鈕要打開
5.檢查下面的地方有沒有填寫:必須要填掷倔,不填無法分享,能登錄个绍。
6.對照微信開放平臺上面的boundleID 有沒有填錯勒葱。boundleID對應項目的boundleID boundleID對應開發(fā)者賬號的IDS
7.如果還不行的話就是集成微信有問題,移除重新集成巴柿。
肯定在這幾個可能里面的凛虽。
這個的問題所在 IDS boundleID 對應的開發(fā)者賬號以及證書 通用鏈接 沒有搞好就去搞微信登錄和微信分享還有一個代理方法沒有寫,到上架的時候有換來換去導致的广恢。
經(jīng)過這次教訓得到什么凯旋,第一:開發(fā)要拿到開發(fā)者賬號,配置好證書钉迷,IDS,app信息能填多小就多小至非,做好通用鏈接,再去開發(fā)項目糠聪,如果做第三方微信登錄荒椭,分享,支付舰蟆,先到微信開放平臺填寫好信息趣惠,之后就不要再改了狸棍,就不會有太大問題了,改來改去很容易出現(xiàn)問題味悄。
其實當時2021.07.02當時測試沒有問題的 到2021.07.05回來有不行了 不知道為什么草戈,后來還是用回就得微信SDK 不用通用鏈接的那種結(jié)果可以了(舊的SDK不用通用鏈接的)
最后2021.07.10 本來打算用(拿貨)舊的微信SDK打包上架的,發(fā)現(xiàn)里面有使用蘋果廢棄的UIWebView導致無法打包侍瑟。
所以只能夠用最新的微信SDK +最新的QQ SDK +最新的微博SDK 之前就是因為使用微信的SDK 導致QQ無法分享唐片。
我再次使用微信的SDK 重新導入一次。然后下面圖片的地方?jīng)]有填寫通用鏈接丢习,結(jié)果微信登錄 分享 QQ登錄 分享 微博登錄成功可以用了牵触。
AppDelegate的回調(diào)是走openUrl的
QQ登錄回調(diào)
微信回調(diào)
這個的問題高度懷疑是 通用鏈接的問題
其實我現(xiàn)在能用微信登錄跟分享 QQ能登錄跟分享 微博能登錄 但是PBItemCollectionServicer connection disconnected這個錯誤依然存在,通用鏈接還沒有真正的搞好咐低。