Android通用业务弹窗管理方案V2

每一次触摸时我会生成当前点击像素的位图拿到当前点击的点的透明度

之后回收位图 根据透明度调用事先设置的回调即可

事件分发到onTouchEvent即可根据回调的状态 设置拦截还是分发事件给native

PS: 考虑到业务场景的不同 定制程度比较高的应用 建议实现属于自己的扩展

(这里存在的问题是动态特效弹窗详情下,触摸会出现卡顿,各位大佬如果有更好的方案,请在评论区留下您宝贵的建议)

2.默认内置JS原生交互方式

/**

  • 混合开发管理 用户可自定义
    */
    public interface HybirdManager {

//注入JSBridge 时机在onreceivetitle
void injectJsBridge(WebView webView,String jsName);

//调用本地提供的基础服务 时机 1.jsprompt 2.post请求 3.原生 4.shouldOverrideUrlLoading
void invokeAppServices(String instruction) ;

//加入JS中android本地对象 时机webview初始化
void addUpJavaNativeJSInterface(WebView webView, String windowObjName);

}

对于Webview弹窗来说与JS的交互是不可缺少的,市面上有许多与JS交互的框架,Android同样有着原生支持,支持用户自定义与弹窗交互的方式,也同样提供了基于JSBridge和原生的默认交互实现,可根据业务与喜好择一使用

这里为了说明方便将下文的交互概念稍微统一

原生调H5为提供基础扩展,同理H5调原生为调用基础服务

中提供了默认的基础服务组件 PopWebViewService

主要包含弹窗 显示和消失等基本功能 和适合各个项目的统一路由服务

当网页显示的时候 我们可以在web调试器console中看到DOM对象的属性

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

PS: 这里的路由 JS传的是调用客户端服务的基础协议 这个协议由jsbridge内部形成 类似结构router://type=xxx?value=yyy,是由用户根据其业务决定的

内置JSbridge

框架中已经内置了Jsbridge,这里就不贴出代码一一说明了

简单的放一张原理图阐述双端的交互机制

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注入时机

框架在这里采取在加载完头部标题时注入的机制

@Override
public void onReceivedTitle(WebView view, String title) {
//注入JSBridge的时机
if(mHybirdImpl!=null){
mHybirdImpl.injectJsBridge(view,jsBridgeName);
}
super.onReceivedTitle(view, title);
}

根据考拉团队的做法

通过设置加载阈值 在监听WebViewClient.onProgressChanged()函数时根据进度来注入也是可行的

回调服务时机

考虑到现今WebView的回调特点, 尽可能全面的在四种方案回调了基础服务接口 并在下面分析了各自的优缺点,用户可择其使用

1.JsPrompt

侵入WebChromeClient.onJsPrompt(webview, url, message, defaultValue, result)实现通信。

优点 返回值类型多样 消息长度上限高

缺点 可能需要处理弹窗问题

2.拦截JS Post请求

优点 通过请求来做操作 可以进行鉴权加密 提高安全性

缺点 请求体body里的内容android端无法接收到(IOS是可以拿到的)

3.Native函数也接收回调

优点 使用方便 管理方便

缺点 容易被反编译破解 拿到服务信息

4.ShouldOverrideUrlLoading拦截跳转

优点 前端用方便 location.href即可

缺点 有些机型此函数是无法生效的

最终回调服务都通往HybirdManager接口的invokeAppServices函数,回收到命令字符串

public void invokeAppServices(String instruction) {
//收到字符串格式的命令分为两种类型1.路由
Uri uri=Uri.parse(instruction);
if(uri.getscheme().equals(routerScheme)){
doRouter(instruction);
}else{
//2.jsbridge中取出的 函数体调用式JSON
//类似{“invokeId”:“name_2_1549953808581”,“methodName”:“name”,“methodParams”:“123”}
//此函数需要解析此json调用基础服务对象的对应方法
doInvokePopWebviewService(instruction);
}

}

3.配置了弹窗管理Callback 方便用户监听弹窗管理过程

public interface PopCallback {

//弹窗已经存在于队列中
void onPopExisted(int queueSize);

//弹窗不在活动时间内
void onPopOutOfDate();

//弹窗已经显示了最大个数
void onPopShowMaxCount();

//弹窗显示成功回调
void onPopShowSuccess();

//弹窗延迟消失回调
void onPopDelayDismiss();

}

弹窗效果预览

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

JS交互效果预览

因为是手机录的屏 依次按顺序发送命令 最终回调invokeService里显示弹窗

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

特效展示(红包雨)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关于项目

PoupoLayer

一个通用的Android端弹窗管理框架,内部维护弹窗优先级队列 具备弹窗管理扩展功能 整合Dialog,PoupoWindow,悬浮Widget,透明Webview,Toast,SnackBar,无需再为繁琐的业务弹窗逻辑所困扰

具体如何使用 可以去github.com/MrCodeSnipe…阅读下面的使用说明文档

您也可以下载Demo体验一番 如有问题 可以在Github上打开Issue或在掘金评论或者私密

V1方案
版本号LOG进度更新
V1.0.0项目开源,完成弹窗管理与Dialog形式扩展Dialog策略扩展完成
V1.0.1修复Dialog策略无法获取dialog实体bugDialog策略优化
V1.0.2修复activity摧毁造成的弹窗异常 bugDialog策略优化
V1.0.3优化了弹窗的使用更加方便快捷框架使用优化
V2方案
版本号LOG进度更新
V2.0.0正式加入透明Webview弹窗策略扩展透明Webview策略扩展完成

接下来的计划

结束了Webview的扩展 后期会对框架进行进一步优化
包括JSBridge功能的封装,更加灵活的配置Webview等 也请感兴趣的同学 给我些建议
新的一年也请多多指教!!!
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

小结

有了这么多优秀的开发工具,可以做出更高质量的Android应用。

当然了,“打铁还需自身硬”,想要写出优秀的代码,最重要的一点还是自身的技术水平,不然用再好的工具也不能发挥出它的全部实力。

在这里我也分享一份大佬自己收录整理的Android学习PDF+架构视频+面试文档+源码笔记,还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这些都是我闲暇还会反复翻阅的精品资料。在脑图中,每个知识点专题都配有相对应的实战项目,可以有效的帮助大家掌握知识点。

总之也是在这里帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

阅的精品资料。在脑图中,每个知识点专题都配有相对应的实战项目,可以有效的帮助大家掌握知识点。

总之也是在这里帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值