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

在uniapp中,为了获取登录后的cookie来调用接口,由于plus.navigator.getCookie返回为空,作者转向使用Android原生组件开发插件。遵循Android uni-app原生插件开发文档,通过创建Android Library模块,实现WXSDKEngine.DestroyableModule派生类,利用WebView监听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)
		})
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值