uniapp和Android原生數(shù)據(jù)交互

一、在uniapp項(xiàng)目添加一個(gè)類,專門用來處理和原生進(jìn)行交互使用;

import Vue from 'vue';

! function(root, factory) {

if (typeof exports == 'object' && typeof module != 'undefined') {

module.exports = factory()

} else if (typeof define == 'function' && define.amd) {

define(factory)

} else {

document.addEventListener('plusready', function() {

// 修改此處為插件命名 ?注釋---1

var moduleName = 'uniappPlugin';

root.plus[moduleName] = factory()

}, false);

}

}(this, function() {

//在此處定義自己的方法 ?注釋---2()

var _BARCODE = 'uniappPlugin';

var plugintest = {

/** 跳轉(zhuǎn)原生登錄頁面 */

JumpNativeLoginView: function(successCallback, errorCallback) {

var success = typeof successCallback !== 'function' ? null : function(args) {

successCallback(args);

},

fail = typeof errorCallback !== 'function' ? null : function(code) {

errorCallback(code);

};

// 注釋---3

var callbackID = plus.bridge.callbackId(success, fail);

? ? ? ? ? ? //注釋---4

? ? ? ? ? ? ?let userName = "";

let userPwd = "";

// 注釋---5

return plus.bridge.exec(_BARCODE, "startLoginActivity", [callbackID,userName,userPwd]);

}

}

return plugintest;

});

代碼注釋說明:

注釋1和注釋2:下面已經(jīng)說明了,要和原生添加插件類同名;

注釋3:創(chuàng)建一個(gè)回調(diào)ID,uniapp和原生就是通過這個(gè)callbackID進(jìn)行識(shí)別和通訊

注釋4:添加額外的參數(shù)傳到原生(建議使用字符串或者json字符串)

注釋5:uniapp異步調(diào)用原生插件類的方法

二、在vue頁面或者JS文件中需要調(diào)用的地方添加以下代碼

AndroidPlugin:這個(gè)是導(dǎo)入上面代碼類文件的一個(gè)別名---import AndroidPlugin from './androidPlugin.js';

AndroidPlugin.JumpNativeLoginView(function(result) {

//這里是處理原生成功后返回的一個(gè)回調(diào)(可以獲取登錄返回的用戶信息或者原生返回其它的一些信息等)

}, function(fail) {

//這里是原生失敗后返回的一個(gè)回調(diào)(一般這里不會(huì)添加什么代碼)

});

三、在AndroidStudio中添加一個(gè)插件類命名為PluginFeature,并將它繼承為StandardFeature(StandardFeature是uniapp打包SDK中的一個(gè)插件擴(kuò)展類);

四、在uniapp打包SDK中的assets/data/dcloud_properties.xml文件中添加以下代碼

?

注意:name是要和上面代碼中注釋1和注釋2同名的,大家不要搞錯(cuò)了,否則會(huì)調(diào)用不到,value就是你創(chuàng)建的插件擴(kuò)展類路徑

public class PluginFeature extends StandardFeature {

private static JSONArray tempArray;

private static IWebview iWebview;

/**

* 調(diào)用原生登錄

*

* @param iWebview uniapp傳過來的webview參數(shù)

* @param array? ? uniapp傳回來的callID和其它的數(shù)據(jù)

*/

public void startLoginActivity(IWebview iWebview, JSONArray array) {

this.tempArray = array;

this.iWebview = iWebview;

//獲取回調(diào)ID(一定要獲取這個(gè),原生通過這個(gè)ID來給uniapp回傳數(shù)據(jù),uniapp也是靠這個(gè)ID進(jìn)行解析)

String CallBackID = tempArray.optString(0);

//獲取uniapp傳過來的userName和userPwd

String userName = tempArray.optString(1);

String userPwd = tempArray.optString(2);

//TODO:跳轉(zhuǎn)登錄頁面

Context context = MyApplication.app;

Intent intent = new Intent(context, LoginActivity.class);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

context.startActivity(intent);

//將數(shù)據(jù)異步回傳到uniapp中

JSUtil.execCallback(iWebview, CallBackID,

"登錄成功后的用戶信息回傳到uniapp中,記住一定要字符串,json字符串也可以",

JSUtil.OK, false);

}

}

注意點(diǎn):

(1)插件的擴(kuò)展名一定要一致,否則是無法互相通訊的

(2)iOS使用這種方法也是可以實(shí)現(xiàn)原生iOS和uniapp的數(shù)據(jù)交互的

(3)本人發(fā)現(xiàn)原生拿到的callBackID只能使用一次,原生只要回調(diào)回去后,這個(gè)callBackID就失效不能再次使用了(本人也不知道原因,不過按照個(gè)人理解也合理,類似iOS中的委托,使用完就釋放了)

(4)原生回調(diào)傳回去的數(shù)據(jù)是字符串類型的,如果是json字符串,uniapp需要轉(zhuǎn)換成對(duì)象需要使用JSON.parse(result)才方便使用

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過簡信或評(píng)論聯(lián)系作者。

友情鏈接更多精彩內(nèi)容