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版本的插件。


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

查看所有标签

猜你喜欢:

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

乔布斯离开了,马斯克来了

乔布斯离开了,马斯克来了

[日]竹内一正 / 干太阳 / 中信出版社 / 2015-11

在电动汽车的创新上,特斯拉抓住了一个群体的独特需求,外形很酷,不烧油,智能化控制。所有的颠覆式创新都不是敲锣打鼓来的,而是隐藏在一片噪声里,马斯克给我们带来的特斯拉虽然不尽完美,但他做产品的思维和执着于未来的勇气,值得学习。埃隆•马斯克创办公司也不是为了赚钱,而是为了拯救人类和地球,电动汽车、太阳能发电、宇宙火箭,不管是哪一项都足以令一个国家付出巨大的代价去研究开发,但埃隆•马斯克却一个人在做这些......一起来看看 《乔布斯离开了,马斯克来了》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换