uniapp开发原生android插件,获取浏览器cookie

由于想让app打开一个url登录后获取cookie调用接口,使用plus.navigator.getCookie获取cookie为空,只能想办法使用android原生组件了。
参考:Android uni-app原生插件开发文档

一.下载SDK
1.解压
2.使用Android Studio导入UniPlugin-Hello-AS项目
项目包括

  • app模块(主要用于测试插件)
  • uniplugin_richalert模块(自带插件的示例)

二.创建自己的插件

  1. 使用Android Studio选择File->New->New Module->Android Library创建模块
  2. 修改build.gradle可参照uniplugin_richalert模块复制
  3. 打开Open Module Settings修改Compile Sdk Version为28,个人使用29编译报错
  4. 创建WXSDKEngine.DestroyableModule派生类编写交互代码,可打开新Activity使用WebView组件监听cookie
  5. 使用WXSDKEngine.DestroyableModule.mWXSDKInstance.fireModuleEvent触发监听

三.运行

  1. 打开app模块
  2. 在build.gradle下追加implementation project(’:插件名’)
  3. 修改assets/dcloud_uniplugins.json文件,参照uniplugin_richalert配置
  4. 将assets/apps/下文件删除,替换为自己的uniapp编译文件
  5. 修改assets/data/dcloud_control.xml修改为自己的appid

模块部分代码


public class MBrowserModule  extends WXSDKEngine.DestroyableModule{
    public static BrowserActivity browserActivity;
    @JSMethod(uiThread = true)
    public void open(JSONObject options, JSCallback jsCallback){

        String url = options.getString("url");
        Object initCookieObj = options.get("initCookie");
        boolean initCookie = false;
        try{
            initCookie = Boolean.parseBoolean(initCookieObj.toString());
        }catch (Exception e){

        }
        System.out.println(url);
        Context context = this.mWXSDKInstance.getContext();

        Intent intent = new Intent(context, BrowserActivity.class);
        intent.putExtra("url",url);
        intent.putExtra("initCookie",initCookie);
        MyWebViewClient.setMyWebViewClient(new MyWebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {

                return false;
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
            {
                return false;
            }
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                String cookie =  CookieManager.getInstance().getCookie(url);
                JSONObject jsonObject = new JSONObject();
                jsonObject.put("url",url);
                jsonObject.put("cookie",cookie);
                MBrowserModule mBrowserModule = MBrowserModule.this;
                MBrowserModule.this.mWXSDKInstance.fireModuleEvent("pageChange",mBrowserModule,jsonObject);

            }
        });
        context.startActivity(intent);
    }

    @JSMethod(uiThread = true)
    public void close(){
        if(browserActivity!=null){
            browserActivity.finish();
        }
    }

    @Override
    public void destroy() {

    }
}

用原生插件写的贴吧签到工具,登录账号,获取cookie调用接口

链接:https://pan.baidu.com/s/1Ig2VK8qJoQbeZFmX-fiNEQ 提取码:sdwf

案例

链接: https://pan.baidu.com/s/1E7GGuSUsPOds3QSmY0Iv1Q提取码: grvs 下载插件

openBrowser(){
	const wv = uni.requireNativePlugin('mbrowser')
	try{
		wv.addEventListener('pageChange',e=>{
			console.log(e)
		})
		wv.open({initCookie:true,url:'https://taobao.com'})
	}catch(e){
		uni.showModal({
			showCancel:false,
			content:JSON.stringify(e)
		})
	}
}

你可能感兴趣的:(android,java,vue,移动开发,安卓)