购买一个应用程序以启用另一个应用程序的付费功能如何运作?

How does buying an app to enable paid features of another app work?

有应用(例如https://play.google.com/store/apps/details?id=com.teslacoilsw.launcher) that are free, but whose paid features can be enabled by buying another app (in this case, this one https://play.google.com/store/apps/details?id=com.teslacoilsw.launcher.prime

这是如何工作的?

我的猜测是免费应用程序会启动一个明确的 Intent,并且可以通过 try/catch 结构检测该应用程序是否存在。这样做的缺点是,创建具有相同包名的应用程序并指定所有可能的 Intent 过滤器的人很容易绕过这一点。

这是它的工作方式,还是其他方式?

有多种方法可以做到这一点。一种方法是查询将受到特殊权限保护的内容提供者。

我很久以前就在 Github 上发布了一个库,它有助于做到这一点:Android Unlocker Library

如果您正在处理 Google 生态系统之外的设备,这是一个不错的选择,但是,从开发人员的经验来看,in-app 购买提供了更好的用户体验(从而推动了更多的销售)据我所知。

最简单的方法是使用应用 A 的 startActivityForResult(...) 和应用 B 的 Activity,必须配置 IntentFilter 才能从外部应用使用。在名为 activity 的 B 中,您还可以使用 getCallingActivity() 检查谁在呼叫。你可以找到一个例子 here.

在启动 Activity 之前,您可以测试 B 是否已安装(使用 PackageManager)或者您可以只启动 activity 并捕获异常。

在被调用的Activity中,您可以使用the PackageManager.checkSignature(String,String)方法检查调用包的签名。传递A和B的包名,签名匹配则执行逻辑