一个360 Droidplugin的运用,实现支付插件化,以及插件化实现时遇到的一些问题

来源:互联网 发布:强力数据恢复大师使用 编辑:程序博客网 时间:2024/06/05 16:38

针对于360 droidplugin市场运用情况我不是很了解,我写这个相当于只是个人对于360 droidplugin 一个项目运用的总结

一:针对用户
起码自己能集成360 droidplugin ,运行跑通起来,这里我就不多说一些360 droidplugin  的接入,具体的可以看看官方的文档:
点击打开链接

二:场景应用

就是通过把一些简单的第三方支付,做成一个插件,让宿主能够实现支付插件的安装、启动、更新、支付。微信支付没有去研究,估计不行,因为涉及到宿主包名和宿主签名校验问题。

三:工程介绍
由于这个项目之前是用Eclipse开发的。所以我就懒得用Android studio运行了。
总工就四个project

CommonLib:存放一些公共的工具类以及回调类
DroidPlugin_pay:360 Droidplugin的代码
PayHost: 宿主的工程
PayPlugin:支付插件的工程

四:大致思路:
简单来讲就是宿主PayHost,安装好支付插件PayPlugin,启动插件的一个LocalService.这个LocalService只是为了能够让插件运行可以正常的接受广播。 当调用支付的时候,宿主PayHost 发送广播,带上相关参数,当PayPlugin 插件接受到广播后,执行相关操作,部分操作需要在Activity下才能实现,所以就会启动一个透明的Actiivty。比如:调用支付宝支付,等支付完成后,并把透明的activityf 关闭,最后通过广播把结果告知宿主PayHost,实现动态回调。


五:相关问题以及难点:
1.广播发送intent.setPackage 的问题:setPackage的目的是为了限定广播的接收者,只有这个包名的程序才能接收,所以这个埋下了一个坑。因为360droidplugin的插件是虚拟安装的,并不是真正的安装了插件到手机上,简单的表现就是手机上不会显示插件的项目图标。所以intent.setPackage 的时候,如果你设置的是插件的包名程序就无法正常运行。应该设置PayHost的包名。

2.回调的通知问题:实际上宿主和支付插件的回调不是真正的透传实现的。因为Intent 无法实现回调对象的传递,同时360 deroidplugin 好像也无法实现通过startActivityForResult 来实现和插件的同步结果,具体的为什么我也记不清楚了。这里就不深入研究。所以就还是通过广播的方式来实现。

简单的来说就是:宿主发送带参数的有序广播,并且同时注册一个广播接收者,用户来接收插件的结果通知。  插件接收到的宿主的广播后,通过参数的逻辑判断执行操作,然后得出一个结果,并将这个结果也以广播的形式告知宿主。宿主的广播接受者收到后就大致的实现了回调的同步。

3.横竖屏的问题:

我们知道横竖屏切换问题通过设置 android:configChanges 可以解决生命周期重复调用问题,但是这个 android:configChanges设置插件的activity的时候没有生效,具体原因我没有深入了解(估计以我的水平也无法了解)。通过日志来证明:

启动竖屏Activity的时候日志:

启动横屏Activity的日志:

发现调用了两次。对我们的程序会有很大的影响,所以启动payActivity的当前activity必须是竖屏的才能正常运行。否者就会有异常。   正常运行的时候,我们是宿主Host的activity来启动支付插件的,如果Host 发送支付广播的activity是竖屏就正常运行,但是如果是横屏呢,毕竟有很多游戏是横屏的。那也简单,就是发送支付广播之前再启动一个透明的竖屏的activity,然后在这个竖屏透明activity来发送支付广播。

具体的代码就没有写了。这个也简单。

注意:支付插件里面的两个activity 实际上是不需要的MainActivity、MainActivity2  可以删除。只是为了展示下插件化同样可以实现 支付的效果,所以才留下的,同时也是为了打印横竖屏日志所以才留下。


项目工程下载地址:点击打开链接





0 0