如何在 Jetpack Compose with Legacy SDK 中处理华为应用内购买?

问题描述 投票:0回答:1

我目前正在将移动应用程序从传统的 Activity/XML 方法迁移到 Jetpack Compose。作为此次迁移的一部分,我面临着集成华为应用内购买服务的挑战。

华为内购SDK(自2023年起未更新)需要使用

Status.startResolutionForResult(Activity activity, int requestCode)
发起内购,并在Activity的
onActivityResult
方法中处理结果。

鉴于 Jetpack Compose 提倡单活动架构,我正在探索直接在可组合函数中处理结果的方法。我尝试将

rememberLauncherForActivityResult
ActivityResultContracts.StartActivityForResult
合约一起使用:

val iapStatusForResult = rememberLauncherForActivityResult(ActivityResultContracts.StartActivityForResult()) {

}

但是,

iapStatusForResult.launch
方法需要
Intent
作为输入。不幸的是,
Status.startResolutionForResult
方法不会返回
Intent
,而是使用提供的
startActivityForResult
实例直接在内部启动
startIntentSenderForResult
Activity
方法。

注意此类内部使用的意图是私有字段。

我现在想到的唯一解决方案是使用反射来修改

Intent
类中
Status
字段的可见性,以直接访问它并在我的可组合项中使用它。

这是一个不太理想的解决方案,因为它潜在的脆弱性和对内部实施细节的依赖。

我愿意接受可能更适合处理这种特定情况的建议和替代方法。任何见解或解决方法将不胜感激。

android-jetpack-compose in-app-purchase onactivityresult startactivityforresult huawei-iap
1个回答
0
投票

探索 SDK 中的

Status
类,我发现公开了两种方法来检索内部使用的
intent
pendingIntent
字段,以便在应用内购买中启动。

所以使用它时,我只需要根据情况使用

startResolutionForResult
函数配合
rememberLauncherForActivityResult
合约或者
ActivityResultContracts.StartActivityForResult()
来重新实现SDK的
ActivityResultContracts.StartIntentSenderForResult()
方法的逻辑即可。

© www.soinside.com 2019 - 2024. All rights reserved.