解决微信登录WeChatSDK: wxlog:Error:set token fail, errCode:4

3,134 阅读2分钟

问题

我的问题是App点击微信登录跳转到微信,然后没有确认授权直接跳回App,就没有后续了

解决办法

查找了微信的官方文档和论坛,很多人都有这个问题,下面是看到的几种解决办法也没有解决我的问题,最后会附上我的解决办法:

- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler{
   return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}

这个方法是必须的

  • universalLink需要与微信开放平台的链接一致,比如都需要带“/”,Associated Domains的链接为applinks+去掉https的域名不带“/”
  • 开启Log方法startLogByLevel,开启自检函数continueUserActivity,注意register的方法要放在前两个方法中间,运行程序检查打印Log
  • 自检函数All checked了还是不行,sendReq:completion返回的是NO,打印的是wxlog:Error:set token fail, errCode:4

还是没解决办法

前前后后检查了apple-app-site-association,Bundle Identifier是否支持Aassociated Domains,甚至更新了微信的SDK到最新,还是不行,直到看到一个解决办法

- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler
{
    return [[UMSocialManager defaultManager] handleUniversalLink:activity options:nil];
}

有人反馈说这样就可以了,表示友盟的分享与微信登录有冲突,但是我修改了还是不行。
但是反映出一个信息,会不会跟友盟的分享有关,从头到尾我们的代码都是没问题的,都是友盟搞的鬼。因为我们的app使用了友盟分享,所以直接删掉了之前的微信登录代码,使用友盟的登录就好了。

[[UMSocialManager defaultManager] getUserInfoWithPlatform:UMSocialPlatformType_WechatSession currentViewController:nil completion:^(id result, NSError *error) {
UMSocialUserInfoResponse *resp = result;
***
}];

总结

因为看微信的论坛反馈这个问题都是最近的,所以认为应该是友盟与微信冲突了微信还没有解决,所以要么删除友盟使用微信的SDK,要么使用友盟登录。
现在想想还挺好玩,微信论坛上那么多关于这个的问题,客服表示你们按照我给的解决办法就能解决,怎么还是没解决呢,他也没想到原来是外部原因UM导致的。