前两天在app调用微信登录加SDK之后,登录打开了微信的授权界面,但是点击同意之后返回app的时候出现了两个问题
一个是uni.login直接走fail了(后来我怀疑是没把那个arr的文件放在java目录里导致的),一个是success,fail,complete都不走,
各种id配置是没错的,但是我还没有接触过安卓的开发,于是解决的流程就只能各种查帖子,
在经过各种调试以及查询后,Gemini提了一个方案是微信传回app的信息没有传回去导致失败的
然后连接手机分析日志
给出了一个结论:
好的,这张日志截图非常关键,它直接指出了问题的根本原因!我们可以停止猜测了,这就是“确凿的证据”。
简单来说:
从Android 12开始,为了提升系统安全性,Google要求所有App在创建一个
PendingIntent时,必须“说清楚”这个Intent后续能不能被修改。而你项目中集成的微信SDK版本太老了,它在创建这个用于回调的PendingIntent时,没有遵循这个新规定。因此,在Android 12及以上版本的系统上,这个创建操作被系统直接拒绝,导致微信无法将结果回调给你的App,你的uni.login自然也就收不到任何响应。
解决方案
这个问题与你之前的配置(如WXEntryActivity)没有关系,纯粹是SDK版本兼容性问题。解决方法就是升级相关的SDK。
请根据你的打包方式选择对应的解决方案:
方案一:对于使用HBuilderX云打包的用户 ,应该没有这种问题
方案二:对于使用本地/离线打包的用户
如果你是自己搭建Android Studio环境进行离线打包,你需要手动更新微信SDK的依赖。
- 打开项目:在Android Studio中打开你的原生工程(通常在
uni-app项目/android目录下)。 - 修改
build.gradle:找到主模块的build.gradle文件(通常是android/app/build.gradle)。 - 更新微信SDK依赖:在
dependencies代码块中,找到微信SDK的依赖项,类似implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'或者是一个本地的.aar文件。- 如果是远程依赖:请确保版本号是最新的。查阅微信开放平台官方文档获取最新的SDK版本号和集成方式。
- 如果是本地aar文件:你需要去微信开放平台下载最新的SDK包,替换掉你项目中的旧版本
.aar文件。
- 同步并重新打包:修改完
build.gradle后,点击"Sync Now",然后重新编译打包你的APK。方案三:临时解决方案 (不推荐,仅供测试)
如果你因为某些原因暂时无法升级SDK,可以尝试降低App的目标版本来绕过这个限制。
- 打开
android/app/build.gradle文件。 - 找到
targetSdkVersion这一行。 - 将其值从
31或更高降级到30。 - 同步并重新打包。
警告:这只是一个临时的规避手段。Google Play商店对上架App的targetSdkVersion有最低要求,长期来看,你必须升级SDK才能满足上架要求并获得最新的系统特性和安全补丁。
总结一下:你的首要任务是升级HBuilderX到最新版,然后重新云打包。如果不行,再考虑本地打包并手动更新微信SDK。
查了一下,安卓12的回答像瞎编的,应该是13的问题,微信文档也提了这个问题是安卓13
解决办法是去除离线打包文档里说让加的intent-filte标签,我去除了之后配合其他改动确实是可以用了
总结一下我的改动
1.去除intent-filte标签
2.在activity里加上了android:taskAffinity(微信文档提了)
3.targetSdkVersion版本改成34了(因为AndroidStudio老在那有横线提示),但是记得加上
4.还有一个这里的配置Gemini说改动一下<application
...
android:allowBackup="false"
tools:replace="android:allowBackup">
...
</application>
.......其他改动有点忘了
具体哪个改动生效的我没一个一个去试,反正最后能用了,在这之前我查了不是帖子都在说的是配置不对id错了签名错了的,还有的发个帖求助问题然后扔下一句解决了也不说一下怎么解决的就跑了,
目前看和微信登录有关的问题回答都是千篇一律的签名配置问题,我这个问题算是一个经验吧,至于对不对就看有没有大佬去验证一下了.

