由于想让app打开一个url登录后获取cookie调用接口,使用plus.navigator.getCookie获取cookie为空,只能想办法使用android原生组件了。
参考:Android uni-app原生插件开发文档
一.下载SDK
1.解压
2.使用Android Studio导入UniPlugin-Hello-AS项目
项目包括
- app模块(主要用于测试插件)
- uniplugin_richalert模块(自带插件的示例)
二.创建自己的插件
- 使用Android Studio选择File->New->New Module->Android Library创建模块
- 修改build.gradle可参照uniplugin_richalert模块复制
- 打开Open Module Settings修改Compile Sdk Version为28,个人使用29编译报错
- 创建WXSDKEngine.DestroyableModule派生类编写交互代码,可打开新Activity使用WebView组件监听cookie
- 使用WXSDKEngine.DestroyableModule.mWXSDKInstance.fireModuleEvent触发监听
三.运行
- 打开app模块
- 在build.gradle下追加implementation project(’:插件名’)
- 修改assets/dcloud_uniplugins.json文件,参照uniplugin_richalert配置
- 将assets/apps/下文件删除,替换为自己的uniapp编译文件
- 修改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)
})
}
}
在uniapp中,为了获取登录后的cookie来调用接口,由于plus.navigator.getCookie返回为空,作者转向使用Android原生组件开发插件。遵循Android uni-app原生插件开发文档,通过创建Android Library模块,实现WXSDKEngine.DestroyableModule派生类,利用WebView监听cookie。文章提供了详细步骤和示例代码,并分享了原生插件写的贴吧签到工具的资源链接。
2670

被折叠的 条评论
为什么被折叠?



