# 2、uniapp对接 - js注入方式

该对接方式只适用于对接游戏cpl

uniapp对接js注入demo下载 (opens new window)

# 适配ios + android

# 1、保存js文件

将下面js代码保存至本地项目中

查看
    
(function(w) {
        function plusReady() {
            console.log("plusReady");
        };
        if (w.plus) {
            plusReady();
        } else {
            document.addEventListener("plusready", plusReady, false);
        };
        //IOS跳转
        function openSafari(url) {
            plus.runtime.openURL(url);
            console.log(url)
        }
        var packName = null;
        var dtask = null;
        var android = {
            CheckInstall: function(pg) {
                console.log("CheckInstall" + pg);
                this.packName = pg;
                var b = plus.runtime.isApplicationExist({
                    pname: pg
                }) ? 1 : 0;
                console.log("CheckInstall_Return  是否已安装 " + this.packName + b);
                CheckInstall_Return(b)
            },
            OpenAPP: function(pg) {
                console.log('OpenAPP' + pg);
                if (plus.os.name == "Android") {
                    plus.runtime.launchApplication({
                        pname: pg
                    }, function(e) {
                        alert("Open system default browser failed: " + e.message);
                    });
                }
            },
            Browser: function(pg) { //IOS下载
                plus.runtime.openURL(pg);
                console.log(pg)
            },
            InstallAPP: function(down_url) {
                console.log('InstallAPP' + this.packName + " " + down_url);
                var index = down_url.lastIndexOf('/') > down_url.lastIndexOf('?') ? down_url.lastIndexOf('/') : down_url.lastIndexOf(
                    '?');
                var apk_name = "_downloads/" + down_url.substring(index + 1, down_url.length);
                if (apk_name.indexOf(".apk") == -1) {
                    apk_name = apk_name + '.apk';
                }
                console.log("下载文件 " + apk_name);
                if (dtask != null && dtask.url === down_url) {
                    console.log("任务正在下载中!")
                    return;
                }
                var options = {
                    method: "GET",
                    filename: apk_name
                };
                console.log("开始创建下载任务 ");
                var precent = 0;
                var pkName = this.packName;
                dtask = plus.downloader.createDownload(down_url, options, null);
                dtask.addEventListener("statechanged", function(task, status) {
                    if (!dtask) {
                        return;
                    }
                    switch (task.state) {
                        case 1: // 开始
                            console.log("开始下载 ...");
                            console.log("开始下载 ..." + pkName + "->" + precent);
                            precent = 0;
                            break;
                        case 2: // 已连接到服务器
                            console.log("链接到服务器... ");
                            console.log("链接到服务器 ..." + pkName + "->" + precent);
                            precent = 0;
                            break;
                        case 3: // 已接收到数据
                            var cur_precent = parseInt(100 * task.downloadedSize / task.totalSize) //Math.round(task.downloadedSize * 100 / task.totalSize)
                            if (precent != cur_precent) {
                                precent = cur_precent;
                                console.log("正在下载…… packageName->" + pkName + "  progress->" + precent + "%");
                                setProgress(pkName, precent);
                            }
                            break;
                        case 4: // 下载完成
                            var filepath = task.filename;
                            console.log("下载完成 " + filepath);
                            setProgress(pkName, 0);
                            var install_options = {
                                force: false
                            };
                            plus.runtime.install(filepath, install_options, function(widgetInfo) {
                                console.log("安装成功");
                                dtask = null;
                                console.log(dtask == null);
                            }, function(e) {
                                console.log("安装失败" + e.message);
                                dtask = null;
                                console.log(dtask == null);
                            });
                            break;
                    }
                });
                dtask.start();
                console.log("下载任务创建成功 ");
            }
        };
        w.android = android;
    })(window);

# 2、注入js文件

注意:this.url 需要从接口认证获取

以下是创建webview进行js注入示例,可自行定义webview加载方式


    var wv = plus.webview.create(this.url, "xw", {
        titleNView: {
        backgroundColor: "#0066CC",
        titleColor: '#000000',
        titleText: '爱变现',
        autoBackButton: true,
        }
    });

    wv.addEventListener("loaded", (function() { //android 可写外面   ios的js注入必须在页面加载完成后
        console.log("开始注入js");
        // 该js文件就是第一步保存的js文件地址
        wv.appendJsFile('_www/hybrid/html/xianwan.js')
        console.log("注入js完成");
        }));

    wv.show();
    // 获取当前页面的webview对象,this.$mp.page当前页面的实例,也可以使用 plus.webview.currentWebview()
    var currentWebview = this.$mp.page.$getAppWebview(); 
    // 一定要append到当前的页面里!!!才能跟随当前页面一起做动画,一起关闭
    currentWebview.append(wv);

# unipp 部分方法示例

// 1 、获取设备号deviceid方法
if (plus.os.name == "Android") {
    var Context = plus.android.importClass("android.content.Context");
    var tephoneManager = plus.android.importClass("android.telephony.TelephonyManager");
    var tm = plus.android.runtimeMainActivity().getSystemService(Context.TELEPHONY_SERVICE);
    this.imei = tm.getDeviceId();
}
// 2、部分实现代码 不要直接拷贝
// #ifdef APP-PLUS 
//获取方法介绍
var Build = plus.android.importClass("android.os.Build");
var androidosv = Build.VERSION.SDK_INT;

plus.device.getOAID({
    success: function(e) {
        console.log('getOAID success: ' + JSON.stringify(e));
        that.msa_oaid = e.oaid;
        console.log(e.oaid);
    },
    fail: function(e) {
        console.log('getOAID failed: ' + JSON.stringify(e));
        that.msa_oaid = ''
        console.log(e.oaid);
    }
});