Cordova微信登录插件Android端不能使用的问题

栏目: IOS · Android · 发布时间: 6年前

内容简介:在开发混合项目的时候,避免不了使用微信登录。然而微信官方并没有提供针对混开项目的集成方式;好在网上有大神针对cordova写了一个微信登录的插件,可惜两年前就已经停止维护,存在一些问题,下面就主要遇到的问题,提供一些解决办法。共有3个错误:1 获取AppID方法调用错误

在开发混合项目的时候,避免不了使用微信登录。然而微信官方并没有提供针对混开项目的集成方式;好在网上有大神针对cordova写了一个微信登录的插件,可惜两年前就已经停止维护,存在一些问题,下面就主要遇到的问题,提供一些解决办法。

  1. java代码错误
  2. 微信文件位置放错

java代码错误

共有3个错误:

1 获取AppID方法调用错误

2 变量调用错误

3 获取js参数错误

首先来看一下错误文件所在位置:

报错文件路径:src/main/java/xu/li/cordova/wechat的WeChat文件

Cordova微信登录插件Android端不能使用的问题

获取AppID错误

Cordova微信登录插件Android端不能使用的问题

该方法调用getAppId()方法获取String类型的AppID并将值赋值给saveAppid。但是该方法传入了一个Activity。我们查看该方法时发现getAppId()方法并没有让传入任何参数。

(图3)

Cordova微信登录插件Android端不能使用的问题

**解决方式**

去掉cordova.getActivity()参数

try {
    final String appid = params.getString("appid");
    //去掉Activity参数
    final String savedAppid = getAppId();
    if (!savedAppid.equals(appid)) {
         this.saveAppId(cordova.getActivity(), appid);
        }
复制代码

变量调用错误

在图3中我们看到异常代码

appId = preferences.getString(WXAPPID_PROPERTY_KEY, "");
复制代码

如果懂点 java 基础的人一看就知道错误的原因,getAppId()方法为一个静态方法,里面调用的方法也应该是静态的。

解决方式

1 将CordovaPlugin类的成员变量也修改为静态的

protected static CordovaPreferences preferences;
复制代码

2 在Wechat类中申明一个CordovaPreferences的静态变量,并在pluginInitialize()方法其赋值 Cordova微信登录插件Android端不能使用的问题 最后将getAppId()方法改成如下

public static String getAppId() {
        if (appId == null) {
            //获取Appid
            appId = myAppID.getString(WXAPPID_PROPERTY_KEY, "");
        }

        return appId;
}
复制代码

获取js参数错误

在调用微信支付的时候会调用sendPaymentRequest()方法,此方法中会获取从js前端传过来的参数值获取AppId

Cordova微信登录插件Android端不能使用的问题

由于公司项目中js代码调用微信分享适配的为2.0的微信登录分享插件;而当时我用的是2.3版本的插件所以,遇到了参数出入异常的问题。

解决办法

1 去掉红框中的代码

2 将插件换成2.0版本(如果插件使用的为2.0版本,上面的错误都不存在了,只有一个微信官方文件路径错误的问题)

cordova命令:

//移除微信登录分享插件
cordova plugin rm cordova-plugin-wechat
// 添加微信登录分享插件并制定为2.0版本
cordova-plugin-wechat@2.0.0 --variable wechatappid=YOUR_WECHAT_APPID
复制代码

微信文件位置放错

微信登录官方文档有两个是要自己创建的类:WXEntryActivity类和WXPayEntryActivity类 Cordova微信登录插件Android端不能使用的问题 红框中已经说明必须放在包名下面,而插件在项目的目录中自己生成了一个src/包名/wxapi的目录

Cordova微信登录插件Android端不能使用的问题

androidstudio的项目正确包名位置为app/src/main/java/包名

Cordova微信登录插件Android端不能使用的问题

问题解决

1 直接将plugins文件下android项目的微信目录及文件放到正确的包名路径下

Cordova微信登录插件Android端不能使用的问题

此种解决方式在每次写完前端代码,不要使用cordova build android 命令打包,使用此命令会使android项目重构,清楚之前修改的android文件。可以使用cordova run android 命令, 此命令及时没有连接手机,也会将最新的前端代码添加到android项目中;然后使用androidstudio打包即可。

2 修改插件的js代码。打开微信登录分享插件的js代码文件

Cordova微信登录插件Android端不能使用的问题

将targetDir变量的发赋值方法path.join()

var targetDir  = path.join(projectRoot, "platforms", "android", "src", packageName.replace(/\./g, path.sep), "wxapi");
        targetFiles = ["EntryActivity.java", "WXEntryActivity.java", "WXPayEntryActivity.java"];

复制代码

改为

var targetDir  = path.join(projectRoot, "platforms", "android", "app","src","main","java", packageName.replace(/\./g, path.sep), "wxapi");
        targetFiles = ["EntryActivity.java", "WXEntryActivity.java", "WXPayEntryActivity.java"];
复制代码

此问题为androidstudio项目android包名路径的问题,上面解释过,这里就不多解释了。然后就可以删除platforms文件夹下的android平台重新生成了。(提示:如果是2.3版本,删除android平台后,需要修复上面的java代码错误)

总结

cordova微信登录分享插件因为年久失修,所以在android平台出现了一些问题(ios还未发现),问题主要是代码和文件路径错误。如果公司没有硬性要求必须使用2.3版本的插件,建议使用2.0.0版本的插件。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Redis 深度历险:核心原理与应用实践

Redis 深度历险:核心原理与应用实践

钱文品 / 电子工业出版社 / 2019-1 / 79

Redis 是互联网技术架构在存储系统中使用得最为广泛的中间件,也是中高级后端工程师技术面试中面试官最喜欢问的工程技能之一,特别是那些优秀的互联网公司,通常要求面试者不仅仅掌握 Redis 基础用法,还要理解 Redis 内部实现的细节原理。《Redis 深度历险:核心原理与应用实践》作者老钱在使用 Redis 上积累了丰富的实战经验,希望帮助更多后端开发者更快、更深入地掌握 Redis 技能。 ......一起来看看 《Redis 深度历险:核心原理与应用实践》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具