一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希望未来技术之巅上有你们也有我。
发现一个天大的秘密,我当时在2021.7.2号写的QQ登录没有问题的 结果到了2021.7.5号发现登录不了,原因是我在2021.7.2号的时候修改过QQ开放平台里面的信息,然后看到验证通过了。如果马上生效的话2021.7.2号应该是不能登录的,结果到2021.7.5号星期一运行才发现登录不了,证明资料的更新有一定的延时
首先,这个问题我在网上搜索了很多资料,都没有最终的解决办法,后来根据自己的实际情况自己想了好久,终于解决了,
我当时用的是微信的SDK版本是1.8.9,由于IOS 9之后需要用通用链接。
出现这个BUG我打算用开发的时间顺序来去详细说明一下,我当时在开发公司的项目的时候呢,首先没有问产品经理去拿苹果开发者账号,配置证书,配置IDS,配置项目描述文件,上微信开发平台填写信息,就去开发项目。(以后开发公司新项目前要做好这些工作再去开发是最好的,为什么呢?)
因为:我当时新建了个项目用的证书就是上一家公司的证书(假如:abc),boundleID是现在公司的boundleID(假如:123),这样子的话,boundleID的IDS文件就会生成在上一家公司了(abc)。到时候现在的公司开发者账号给我们配置上架的话就不能用现在公司的boundleID(123),生成的时候回提示重复命名的,所以就会造成很大的麻烦,如果你无法在上一家公司的开发者账号里面删掉这个IDS文件就用不了现在公司的boundleID(123),只能重命名一个了(假如:456)。我当时就不管他,一直用上一家公司的证书(abc),然后就做第三方微信登录,在开放平台填的信息是boundleID(123),然后填通用链接 当时我通用链接是按照格式乱填的(假如:zxc),真正的通用链接我还没有做出来,毕竟没有公司的开发者账号,没有生成IDS和Appid,无法做通用链接。就这样我就开始做微信的第三方登录,结果就这样搞好了微信的第三方登录和微信分享。
等项目准备上架的时候,我在去问公司拿开发者账号,去搞证书,配置IDS,跟填写App的上架信息。配置IDS的时候我无法用现在公司的boundleID(123),所以自己重新命名一个boundleID(456),然后证书,IDS(456),App填写资料完成了。然后就去搞通用链接。
通用链接的整个步骤我会在写一篇文章详细说明。
那么我的通用链接搞好之后,我就去微信开发平台上面去修改BounleID(改为456)和通用链接(url),结果去验证微信的登录的时候发现登录都登录不了,分享更加分享不了。我首先还以的是boundleID对不上,所以就把之前备份的微信登录的代码拿出来运行看看是否能登录,结果发现真的能登录,备份的微信登录代码的boundleID 是(123),但问题是我已经把微信开放平台的boundleID已经修改了(456),不可能微信开放平台新修改的信息没有生效吧,如果要把boundleID 修改回(123)的话,在微信开发平台修改就简单了,改一下就可以,问题是项目用123的boundID的证书对应是上一家公司的证书(abc),而且IDS,项目配置文件,填写的Apps信息都是用boundleID(456)...............
哎,没有办法,换就换啦,鬼叫现在登录不了..........
更换了IDS之后我发现,仍然登录不了哦,这就奇怪了。然后我有运行之前备份的微信登录代码能够登录,新的准备上架的代码大家都是同样的boundleID登录不了,说明不是boundleID的问题了。所以boundleID换不换都没有问题。
哪新的代码多了什么呢?
到了中午吃饭的时候,整个第三方的登录跟分享没有进展,想不到怎么去解决。后来下午上班的时候我想了一下,以前在(拿货)工作的时候用就得SDK不需要做通用链接的那种,都能登录跟分享,怎么现在换了最新的SDK就不行呢,想了想,我的BoundleID已经换回来的,微信开发平台的BoundleID跟项目的BoundleID已经是一致。剩下的就是通用链接的问题了,所以我做了个决定,把项目的最新的SDK移除它,用旧的SDK(不需要通用链接的那种)。结果能够登录跟分享。开始看到曙光了。证明确实去通用链接的问题。
通用链接。我当时乱写了一个通用链接的,不过现在做好了通用链接不可能修改为乱写的那个吧,我还是试试。微信开放平台用的是真正能用的那个(url),只是代码修改为之前乱写的那个(zxc)结果运行报错。
image说明什么呢?微信第三放登录的时候,微信开放平台填的通用链接要跟代码里面的通用链接要一致,不管你是乱填的还是写个真正能用的,最重要的是一致。(重点:我说的乱填,也要按照微信开放平台的链接格式来填的例如:https://nahuoshangcheng/app/,不然你也无法保存)
所以,我把代码的链接修改为跟开放平台一样的通用链接。就是真正能用的链接。这个步骤是对的。结果程序崩掉(不能登录),为什么呢。还有一个地方。
image我把这个地方删掉它重新运行一下,发现可以登录了。其实应该还有有问题的,如果使用通用链接的话这个步骤还是必须要填的,但是为什么反而不填就能登录。填了反而出问题,不填写代理的回调方法是这个:
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
后来上去网上找了一下,人家用通用链接回调得代理是下面的这个的。结果我换成下面的这个代理。有回调了,
-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler NS_AVAILABLE_IOS(8_0);
然后我再次把通用链接补上,因为微信的SDK1.8.9的通用链接的做法一定要补上的,
image.png
注意证书配置哪里也要记得打开按钮
image.png
最终得到一个启迪的是什么呢?如果做第三方微信登录的话。其实通用链接做不做都是无所谓的,你乱填一个都是可以的,乱填也要按照微信的格式去填 例如:https://nahuoshangcheng/app/ 不然你也无法保存。那么登录成功的回调AppDelegte里的代理方法就是
重点:重点:重点 SDK要支持通用链接例如我现在用的是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下载了链接后面补上。
总结:PBItemCollectionServicer connection disconnected.
这个BUG的可能性:
1.开发平台上填写的通用链接要跟代码的通用链接一定要一致(不一致会提示通用链接校验失败的)
image2.通用链接必须能用的,不能乱填。怎么能不能用呢。我上面有文章跳去制作过程的。如果能用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信息等 例如:
image.png4.开发者账号的ADS证书 按钮要打开
image.png
5.检查下面的地方有没有填写:必须要填,不填无法分享,能登录。
image6.对照微信开放平台上面的boundleID 有没有填错。boundleID对应项目的boundleID boundleID对应开发者账号的IDS
7.如果还不行的话就是集成微信有问题,移除重新集成。
肯定在这几个可能里面的。
这个的问题所在 IDS boundleID 对应的开发者账号以及证书 通用链接 没有搞好就去搞微信登录和微信分享还有一个代理方法没有写,到上架的时候有换来换去导致的。
经过这次教训得到什么,第一:开发要拿到开发者账号,配置好证书,IDS,app信息能填多小就多小,做好通用链接,再去开发项目,如果做第三方微信登录,分享,支付,先到微信开放平台填写好信息,之后就不要再改了,就不会有太大问题了,改来改去很容易出现问题。
其实当时2021.07.02当时测试没有问题的 到2021.07.05回来有不行了 不知道为什么,后来还是用回就得微信SDK 不用通用链接的那种结果可以了(旧的SDK不用通用链接的)
最后2021.07.10 本来打算用(拿货)旧的微信SDK打包上架的,发现里面有使用苹果废弃的UIWebView导致无法打包。
所以只能够用最新的微信SDK +最新的QQ SDK +最新的微博SDK 之前就是因为使用微信的SDK 导致QQ无法分享。
我再次使用微信的SDK 重新导入一次。然后下面图片的地方没有填写通用链接,结果微信登录 分享 QQ登录 分享 微博登录成功可以用了。
image.pngAppDelegate的回调是走openUrl的
QQ登录回调
image.png
微信回调
image.png
这个的问题高度怀疑是 通用链接的问题
其实我现在能用微信登录跟分享 QQ能登录跟分享 微博能登录 但是PBItemCollectionServicer connection disconnected这个错误依然存在,通用链接还没有真正的搞好。
网友评论