将付费 Android 应用程序与免费版本合并
Merging a paid Android app with the free version
我有一个 Android 应用程序,它有两个版本:一个免费版本和一个收费 0.99 美元的具有更多功能的高级版本。
我想转向应用程序内购买方式,可以在免费版本中购买高级功能。但是,我显然不想让已经购买付费应用的用户不高兴。
是否有任何行之有效的方法可以将单独的免费增值应用合并为一个?
现在,我正在考虑我想出的一个解决方案,如果免费版本检测到设备上安装了付费版本的应用程序,它会自动解锁其付费功能。我正在考虑在应用程序之间使用进程间通信。但是我在 IPC 方面没有经验,尤其是在 Android 方面,我不确定它是否适用于此或是否特别可靠。
However, I obviously don't want to upset my users who have already bought the paid app.
除非您为获得相同功能而对 IAP 收取的费用低于付费应用的费用,否则我不确定这会如何导致用户投诉。不管他们是先付款还是后付款,只要价格相同就无所谓了。
I'm considering a solution I came up with which would have the free version automatically unlock its paid features if it detects that the paid version of the app is installed on the device.
这可以很容易地完成,只需查询 PackageManager
以查看是否安装了其他应用程序。类似于:
try {
PackageInfo info = getPackageManager().getPackageInfo("com.example.paidapp", 0);
//If we got here, the paid app is installed.
// You can even check metadata, like which version they have
int installedVersion = info.versionCode;
} catch (PackageManager.NameNotFoundException e) {
//Paid app is not installed!
}
一些应用程序出于各种原因这样做,使用 "paid" 包作为免费应用程序的密钥,因此并非没有先例。
您可能需要参与的唯一一个 IPC 是,如果您想以某种方式从付费应用程序中读取一些保存的数据到免费应用程序中。在这种情况下,我建议实施 ContentProvider
以将您需要的数据元素公开给其他应用程序。我还将使用 signature
权限保护该提供者,以便只有您的应用程序可以访问它。
我有一个 Android 应用程序,它有两个版本:一个免费版本和一个收费 0.99 美元的具有更多功能的高级版本。
我想转向应用程序内购买方式,可以在免费版本中购买高级功能。但是,我显然不想让已经购买付费应用的用户不高兴。
是否有任何行之有效的方法可以将单独的免费增值应用合并为一个?
现在,我正在考虑我想出的一个解决方案,如果免费版本检测到设备上安装了付费版本的应用程序,它会自动解锁其付费功能。我正在考虑在应用程序之间使用进程间通信。但是我在 IPC 方面没有经验,尤其是在 Android 方面,我不确定它是否适用于此或是否特别可靠。
However, I obviously don't want to upset my users who have already bought the paid app.
除非您为获得相同功能而对 IAP 收取的费用低于付费应用的费用,否则我不确定这会如何导致用户投诉。不管他们是先付款还是后付款,只要价格相同就无所谓了。
I'm considering a solution I came up with which would have the free version automatically unlock its paid features if it detects that the paid version of the app is installed on the device.
这可以很容易地完成,只需查询 PackageManager
以查看是否安装了其他应用程序。类似于:
try {
PackageInfo info = getPackageManager().getPackageInfo("com.example.paidapp", 0);
//If we got here, the paid app is installed.
// You can even check metadata, like which version they have
int installedVersion = info.versionCode;
} catch (PackageManager.NameNotFoundException e) {
//Paid app is not installed!
}
一些应用程序出于各种原因这样做,使用 "paid" 包作为免费应用程序的密钥,因此并非没有先例。
您可能需要参与的唯一一个 IPC 是,如果您想以某种方式从付费应用程序中读取一些保存的数据到免费应用程序中。在这种情况下,我建议实施 ContentProvider
以将您需要的数据元素公开给其他应用程序。我还将使用 signature
权限保护该提供者,以便只有您的应用程序可以访问它。