Android:在我们的应用程序的预装版本中寻找一种解锁隐藏功能的方法

标签 android

恐怕这个问题有点开放,但我希望这是有道理的,因为情况有点不寻常......
我们要达到的目标
我们的一款应用程序将预装在移动运营商即将推出的 Android 手机上。但是,在该预安装的应用程序中,应该解锁一些原本不可用的功能(对于从 Google Play 商店安装应用程序的用户)。例如,为新的付费订阅延长免费试用期。
到目前为止我们的想法
一种选择当然是应用程序的特殊构建,通过某些功能切换启用隐藏功能。然而,这个特殊的构建可能会在用户打开应用程序之前被 Play 商店的自动更新覆盖。
所以到目前为止,我们最好的猜测是预安装我们的主应用程序的正常版本和其他一些没有或只有极少 UI 的应用程序。然后,主应用程序将检测到其他关键应用程序的存在(通过包管理器)并基于此解锁隐藏的功能。
AFAICT 这是在 Google In App Purchases 支持非消耗性一次性产品之前处理付费应用程序免费试用的方式。只要两个应用程序使用相同的 key 签名,它也应该仍然有效,并且从 Android 11 开始,主应用程序在 AndroidManifest.xml 中声明 key .
到目前为止正确吗?
但是...
理想情况下,每个设备只能使用一次隐藏功能,即用户应该只能为一个新订阅申请延长免费试用期 - 而不能为他们的邻居和他们的狗申请额外的免费试用。
这不是一个非常强的要求,因此我们正在考虑在主应用程序和关键应用程序之间添加一些通信,并且关键应用程序将存储之前已声明该好处的事实。当然,这可能可以通过删除关键应用程序的应用程序数据来规避,但总比没有好......
所以,问题:

  • 有没有办法大部分/完全隐藏用户的关键应用程序?这样关键应用程序的功能至少会有些模糊?
  • 还有其他我们忽略的方法吗?就像,有没有办法在运营商可以为我们设置的 Android 图像中设置某种全局变量 - 比如 com.exampleapp.unlock.hiddenfeature1 = true ? - 我们可以查询哪个而不是检查关键应用程序的存在?这可能仍然容易受到多种用途的影响,但也许也有办法禁止这种情况?

  • 还有什么?
    从技术角度来看,一个明显的方法是查询设备的 IMEI(也许对于仍然可能的预安装应用程序?),然后将其与符合条件的设备列表进行比较,或者至少跟踪已声明隐藏功能的 IMEI。但是,当然,出于数据隐私的原因,这是不可能的。
    所以,我希望我明确了我们的目标,非常感谢任何建议、建议和意见!

    最佳答案

    语境

  • 预装应用:PIA
  • Google-Play 应用程序:GPA .

  • 问题
  • PIA 是一种“ flavor ”
  • PIA 利用“共享偏好”留下 GPA 应用程序可以“拾取”的标记
  • 任何其他形式的“共同点”。

  • 这些问题是您无法避免失败的各种情况,特别是如果用户在被 GPA 更新或简单的 SharedPreferences 清理/重新安装之前从未打开您的应用程序。
    想法?
    想法很便宜,所以对所有这些都持保留态度。我主要是在大声思考,因为我发现这是一个有趣的问题。
  • 您是否考虑过某种形式的 Licencing ?例如:使用 Google Play licencing
  • 可以是 dynamic delivery 的形式吗?在这里帮你?
  • 让一个 PIA 只是一个启动器来启动您的应用程序的特殊风格怎么样? (用户可以通过 Instant apps 获得?PIA 不会被 GPA 更新,因为它不会被触及(如果是,它只会被你触及,是的,用户可以再做一次,但是那么你就会为不可能的事情而战)。你将不得不接受一些用户会“作弊”。但是通过使用 PlayStore 和所有这些“功能”,你总是可以控制更多的东西。不确定 Play 商店是否是这些新设备将拥有或不拥有的东西。
  • 除此之外,您将不得不自己处理这个服务器端。拥有一个用户“注册”或请求试用的应用程序,然后从那里获取。

  • 目前我想不出其他的想法。
    我不是在寻找代表,请随意选择更好的回应,但请告诉我们您选择做什么。 ;)

    关于Android:在我们的应用程序的预装版本中寻找一种解锁隐藏功能的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63059624/

    相关文章:

    android 找不到符号 com.google.android.gms.wallet 构建错误

    安卓相机 : fixed lens focus

    android - 缩放到特定的经度和纬度 ArcGis android sdk

    java - 如何在 Samsung Galaxy Tab 上停止通话音频并保持通话?

    android - 运行阻塞请求

    Android Wear - 如何将音频输入从手机传输到可穿戴设备?

    android - 我应该使用 dip、dp、sip 还是 sp 进行文本格式化?

    安卓媒体播放器

    android - 混淆阅读 Flurry 的堆栈跟踪

    java - Android:多次使用setOnSeekBarChangeListner方法