最近一直在想微信与支付宝这样的sdk是怎么做到支付回调的,明明是两个不同的apk,接口、StartActivityForResult什么的肯定是行不通的。忽然想到会不会使用了跨进程通信的机制,客户端给支付宝发送支付请求,支付宝通过回调将支付结果回传给客户端,从而实现连个apk支付的回调。
竟然是这么想的,就不如大胆的实践一下吧!
我们先说一说我想实现的效果
A.apk通过点击跳转到B.apk,然后传递相应的消息,然后B通过点击把消息回传给A。
效果图



服务器apk
首先我们新建一个工程作为服务器apk
然后使用android studio新建aidl文件
|
|
IRemoteServiceCallback顾名思义用于回调给客户端的接口,然后我们建立
IRemoteService.aidl
IRemoteService用于注册回调接口,然后我们Make Project,android studio会自动帮助我们生成其相应的 java文件
然后我们新建一个service用于客户端与服务器通信
我们通过Messenger用来处理Activity与本地service通信,使用RemoteCallbackList处理异步回调。
现在我们在配置文件注册我们的service
我们指定action,这样可以通过action隐式的绑定其service。
然后我们在服务器的Activity中
首先我们绑定本地的service,通过button的点击事件模拟支付成功的回调。点击时我们通过Messenger给service发送一个消息,service收到消息后通过RemoteCallbackList调用回调函数handlerSearchEvent实现服务端给客户端发送异步消息。
客户端apk
首先我们新建一个工程作为客户端apk,然后需要把服务端aidl的文件夹拷贝到相同的目录下。然后在Activity
通过绑定service,实现回调callback方法,便可以实现客户端apk与服务器apk之间的相互通信。
流程
首先客户端需要绑定服务端的service,通过startIntent传递传递参数给服务端的Activity,并且注册回调接口。服务端拿到传递过来的数据进行一系列的操作,当点击按钮是通过Messenger向service传递数据,service收到Activity传递来的数据后,通过RemoteCallbackList调用回调的接口将接受到的数据传递给客户端的Activity,这样便实现了两个apk时间Activity的通信。
最后
通过一系列的实践与测试实现了apk之间的通信,但是不清楚支付宝、微信等sdk是不是以这种方式实现。这里仅仅是通过学习AIDL实现了类似于这种apk之间异步操作的通信,当然说不定有其他实现的方式。