Android唤不起微信登录、支付

2,150 阅读3分钟

最近在研究Flutter,其中有两个功能是微信登录以及微信支付。这需要接入微信相关的SDK。在Flutter中有相对应的插件fluwx实现。开发集成的时候没啥大问题,测试也很完美,微信登录、微信支付都很顺利。但是,问题来了,iOS手机没问题,Android大部分机型也都没有问题,唯独OPPO以及一加的部分机型有问题。现象是:无法唤起微信登录,无法进行微信支付。

问题定位

身为开发人员大家应该都很清楚,兼容性问题是最让人头秃的。

首先,在iOS和大部分Android都没有问题的情况下,说明微信AppID,签名这些配置都没有问题,要不然应该都是失败。

其次,问题比较难搞在于手里没有能复现问题的OPPO以及一加手机。这样我没法用真机链接电脑查看输出日志,具体哪个地方出问题了。

所以只有反复的检查代码的写法,看看跟别人的,跟fluwx示例里的代码有什么差别。

代码检查

// 只贴出关键代码
import 'package:fluwx/fluwx.dart';
void init() {
  // 初始化微信SDK
  registerWxApi(appId: "mine appId",universalLink: "https://mine.test.com/xxx")
      .then((value) {
        print("注册微信:$value");
      });
  isWeChatInstalled.then((value) {
    setState(() {
      Constants.isWeChatInstalled = value;
    });
  });
}

从代码上看,跟fluwx示例对比起来,没什么两样,因为如果代码有问题,不成功,那所有的机型应该都不成功。所以拿不到真机,只能是通过弹框输出日志的方式一点点看问题在哪里。 所以我在registerWxApi回调里,isWeChatInstalled回调里进行的弹框输出,最后弹框信息输出为isWeChatInstalled false。说明判断微信是否安装失败了。

这里我犯了一个错误,就是我的弹框没有做延时处理,所以registerWxApi回调里的输出信息被isWeChatInstalled回调里的弹框覆盖掉了。 所以一直以为registerWxApi回调没有执行,就没太关注这个地方。

最后把isWeChatInstalled回调弹框去掉,只留registerWxApi回调弹框的时候,输出了注册微信:false,说明注册没成功!这不太合理啊,其他的手机为什么能够注册成功?OPPO部分机型也能成功。

此时我还在猜想是不是fluwx的版本有问题,找了朋友的app,也是用fluwx进行开发的,他的微信登录在出问题的OPPO上就没有问题。所以对fluwx版本做了降级以及升级处理,分别试了试,还是不行。朋友在做代码对比的时候疏忽一个地方。

其实,到这里就应该考虑到就是Android系统版本不兼容的问题了。因为同一个机型,有的可以生效,有的失败,说明一定是Android系统兼容的问题。

这期间还专门找朋友的朋友借了一个OPPO手机,进行真机调试,终于能看到微信注册输出的错误信息,签名验证失败:E/MicroMsg.SDK.WXApiImplV10(17142): register app failed for wechat app signature check failed

问题解决

后来我就在微信开放社区里进行搜索的时候发现有一个类似的问题:

image.png

在评论区里找到的答案,不过不是官方人员的回复,哈哈!不过微信官方文档是确实有写这种情况的。

image.png

image.png

image.png

最终,通过在主工程的AndroidManifest.xml里增加<queries>标签并配置微信包名解决了该问题。这也是我上面提到的,朋友在做代码对比的时候疏忽的地方,没有留意这个配置文件!

<manifest package="com.example.app">
    <queries>
        <!-- 指定微信包名 -->
        <package android:name="com.tencent.mm" />
    </queries>
</manifest>

问题总结

  • 真机调试效率最高,能最快速的定位问题在哪里
  • 遇到问题,先从涉及的官方文档入手,这是最一手的资料