最近做了一个跳转微信小程序付出的功能,可是发现付出完成后跳转不回原App。
一、产生原因
微信的SDK文档中要求在app主模块的包姓名录下创立wxapi的文件夹,然后创立一个WXPayEntryActivity,可是我们的工程是一个组件化项目,只要商城shop模块才需要用到付出,而且app模块原本便是一个壳,塞这些微信的东西进去就很厌恶。
二、解决办法
运用activity署理的方式重定向微信的Acticity。
在app主模块的清单文件中运用署理:
<application //放在application根节点中
android:name="包名.base.BaseApplication"
android:requestLegacyExternalStorage="true">
...
<!-- WXEntryActivity的署理,用于微信付出跨组件调用 -->
<activity-alias
android:name="${applicationId}.wxapi.WXEntryActivity"
android:exported="true"
android:targetActivity="包名.shop.WXEntryActivity"/> //这儿的WXEntryActivity能够随意改姓名,且不需要放在wxapi文件夹下
</application>
然后在shop模块定义一个署理的方针Activity即可。
<activity
android:name=".WXEntryActivity"
android:exported="true"
android:launchMode="singleTask"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
在署理Activity(姓名随意取,但建议与WXEntryActivity同名好找好保护)中完成微信的回调逻辑即可:
class WXEntryActivity : BaseActivity<BaseViewModel, ActivityWxpayEntryBinding>(),
IWXAPIEventHandler {
private var api: IWXAPI? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
api = WXAPIFactory.createWXAPI(this, UnifyPayPlugin.getInstance(this).appId)
api?.handleIntent(intent, this)
}
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
setIntent(intent)
api?.handleIntent(intent, this)
}
override fun onReq(baseReq: BaseReq?) {
}
override fun onResp(baseResp: BaseResp?) {
if (baseResp?.type == ConstantsAPI.COMMAND_LAUNCH_WX_MINIPROGRAM) { //小程序回调
//处理微信的结果回调
...
}
finish()
}
}
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
