在開發(fā)混合項(xiàng)目的時(shí)候衰倦,避免不了使用微信登錄花鹅。然而微信官方并沒(méi)有提供針對(duì)混開項(xiàng)目的集成方式;好在網(wǎng)上有大神針對(duì)cordova寫了一個(gè)微信登錄的插件交掏,可惜兩年前就已經(jīng)停止維護(hù)妆偏,存在一些問(wèn)題,下面就主要遇到的問(wèn)題盅弛,提供一些解決辦法钱骂。
- java代碼錯(cuò)誤
- 微信文件位置放錯(cuò)
java代碼錯(cuò)誤
共有3個(gè)錯(cuò)誤:
1 獲取AppID方法調(diào)用錯(cuò)誤
2 變量調(diào)用錯(cuò)誤
3 獲取js參數(shù)錯(cuò)誤
首先來(lái)看一下錯(cuò)誤文件所在位置:
報(bào)錯(cuò)文件路徑:src/main/java/xu/li/cordova/wechat的WeChat文件
獲取AppID錯(cuò)誤
該方法調(diào)用getAppId()方法獲取String類型的AppID并將值賦值給saveAppid叔锐。但是該方法傳入了一個(gè)Activity。我們查看該方法時(shí)發(fā)現(xiàn)getAppId()方法并沒(méi)有讓傳入任何參數(shù)见秽。
(圖3)
解決方式
去掉cordova.getActivity()參數(shù)
try {
final String appid = params.getString("appid");
//去掉Activity參數(shù)
final String savedAppid = getAppId();
if (!savedAppid.equals(appid)) {
this.saveAppId(cordova.getActivity(), appid);
}
變量調(diào)用錯(cuò)誤
在圖3中我們看到異常代碼
appId = preferences.getString(WXAPPID_PROPERTY_KEY, "");
如果懂點(diǎn)java基礎(chǔ)的人一看就知道錯(cuò)誤的原因愉烙,getAppId()方法為一個(gè)靜態(tài)方法,里面調(diào)用的方法也應(yīng)該是靜態(tài)的解取。
解決方式
1 將CordovaPlugin類的成員變量也修改為靜態(tài)的
protected static CordovaPreferences preferences;
2 在Wechat類中申明一個(gè)CordovaPreferences的靜態(tài)變量步责,并在pluginInitialize()方法為其賦值
最后將getAppId()方法改成如下
public static String getAppId() {
if (appId == null) {
//獲取Appid
appId = myAppID.getString(WXAPPID_PROPERTY_KEY, "");
}
return appId;
}
獲取js參數(shù)錯(cuò)誤
在調(diào)用微信支付的時(shí)候會(huì)調(diào)用sendPaymentRequest()方法,此方法中會(huì)獲取從js前端傳過(guò)來(lái)的參數(shù)值獲取AppId
由于公司項(xiàng)目中js代碼調(diào)用微信分享適配的為2.0的微信登錄分享插件禀苦;而當(dāng)時(shí)我用的是2.3版本的插件所以蔓肯,遇到了參數(shù)出入異常的問(wèn)題。
解決辦法
1 去掉紅框中的代碼
2 將插件換成2.0版本(如果插件使用的為2.0版本振乏,上面的錯(cuò)誤都不存在了省核,只有一個(gè)微信官方文件路徑錯(cuò)誤的問(wèn)題)
cordova命令:
//移除微信登錄分享插件
cordova plugin rm cordova-plugin-wechat
// 添加微信登錄分享插件并制定為2.0版本
cordova-plugin-wechat@2.0.0 --variable wechatappid=YOUR_WECHAT_APPID
微信文件位置放錯(cuò)
微信登錄官方文檔有兩個(gè)是要自己創(chuàng)建的類:WXEntryActivity類和WXPayEntryActivity類
紅框中已經(jīng)說(shuō)明必須放在包名下面,而插件在項(xiàng)目的目錄中自己生成了一個(gè)src/包名/wxapi的目錄
androidstudio的項(xiàng)目正確包名位置為app/src/main/java/包名
問(wèn)題解決
1 直接將plugins文件下android項(xiàng)目的微信目錄及文件放到正確的包名路徑下
此種解決方式在每次寫完前端代碼昆码,不要使用cordova build android 命令打包,使用此命令會(huì)使android項(xiàng)目重構(gòu)邻储,清楚之前修改的android文件赋咽。可以使用cordova run android 命令吨娜, 此命令及時(shí)沒(méi)有連接手機(jī)脓匿,也會(huì)將最新的前端代碼添加到android項(xiàng)目中;然后使用androidstudio打包即可宦赠。
2 修改插件的js代碼陪毡。打開微信登錄分享插件的js代碼文件
將targetDir變量的發(fā)賦值方法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"];
此問(wèn)題為androidstudio項(xiàng)目android包名路徑的問(wèn)題,上面解釋過(guò)勾扭,這里就不多解釋了毡琉。然后就可以刪除platforms文件夾下的android平臺(tái)重新生成了。(提示:如果是2.3版本妙色,刪除android平臺(tái)后桅滋,需要修復(fù)上面的java代碼錯(cuò)誤)
總結(jié)
cordova微信登錄分享插件因?yàn)槟昃檬蓿栽赼ndroid平臺(tái)出現(xiàn)了一些問(wèn)題(ios還未發(fā)現(xiàn))身辨,問(wèn)題主要是代碼和文件路徑錯(cuò)誤丐谋。如果公司沒(méi)有硬性要求必須使用2.3版本的插件,建議使用2.0.0版本的插件煌珊。