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


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

查看所有标签

猜你喜欢:

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

Tagging

Tagging

Gene Smith / New Riders / 2007-12-27 / GBP 28.99

Tagging is fast becoming one of the primary ways people organize and manage digital information. Tagging complements traditional organizational tools like folders and search on users desktops as well ......一起来看看 《Tagging》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

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

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试