识别 Google Play 商店退款下载

8
Play Store现在会自动批准购买后2小时内的退款。我有一个Android应用程序,人们可以从中创建和控制VPS游戏主机。也就是说,当您启动应用时,您需要经过注册流程,之后您就拥有了运行游戏的VPS。注册后,如果您想对VPS进行任何更改,则只需使用该应用程序。
我看到有人滥用这一点,他们购买该应用程序(带有30天免费VPS),通过注册流程创建他们的VPS,然后请求退款(如果在2小时内则自动获得批准)。
从Google钱包中,我可以看到哪些订单ID被取消,但我如何将其链接回用户的设备ID或其他我可以在应用中获取的信息?
我正在强制用户在进行注册流程之前声明他们的Google用户帐户:
Intent intent = AccountPicker.newChooseAccountIntent(null, null, new String[]{"com.google"}, false, null, null, null, null);
// ...
email = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);

但这只给了我他们的电子邮件地址,我不能将它与Google Wallet中唯一的标识符OrderID联系起来。
我如何将他们的账户/电子邮件/设备ID与OrderID(或其他在Google Wallet中可用的信息)联系起来?
请注意:这不是针对应用内购买,其中OrderID很容易获得。这是购买应用程序的情况。
谢谢!
编辑: Google Play服务授权和用户帐户管理并不能让您完全获得OrderID:http://developer.android.com/google/auth/http-auth.html 以下是应用内计费的文档,(没有令人惊讶的是)不提供任何有关应用购买订单ID的信息:http://developer.android.com/google/play/billing/billing_reference.html 许可证也不提供OrderID:http://developer.android.com/google/play/licensing/overview.html 存在类似问题但未得到解答的人:http://pcandsys.com/20378/verify-purchase-in-google-play-by-orderid

向用户要求在应用程序屏幕中输入他们从Google Play商店电子邮件中收到的订单ID是否有帮助?如果可以这样操作,也许这是一个临时解决方案,直到有更好的方法出现。 - Joe
理论上这应该是可行的。每当我检测到可疑账户时,我会向应用程序推送通知,要求他们给我发送购买收据的电子邮件。使用这种方法,我发现很多使用手机/设备的人没有访问他们用于购买的电子邮件(收据发送的地方)的权限。最有可能是因为孩子们使用他们父母的设备。我认为让他们发送订单ID的摩擦力太大了。此外,Google Play 应该真正提供此服务,而不是手动检索订单ID。我想你不知道他们是否这样做了..? - beetree
抱歉,我其实不知道。我同意理想情况下应该从Google Play获取信息。但似乎我们可能不在他们默认支持的使用情况之内。举个进一步复杂化的例子,如果我正确理解了您的情况,他们在您的应用程序中选择的帐户也有可能并非真正支付的帐户,对吗? - Joe
看起来这篇帖子可能会在某种程度上帮助我们(进行账户验证)。但我不确定我们是否已经拥有所有的谜题。 - Joe
不完全符合我们的要求,但它可能能胜任,假设破解应用程序无法伪造令牌。我会试一下!我已经测试了来自Play Store的许可库,他们可以破解那个。此外,它经常发出ping信号,即使是合法/有许可的应用程序有时也会被标记为未经许可,这意味着许可证的严格执行是不可行的。 - beetree
哦,而且正确的是,他们在应用程序中选择的帐户可能与他们用于购买应用程序的帐户不同。我认为要求/强制他们选择相同的帐户是合理的。我假设多帐户是相对罕见的用例。 - beetree
2个回答

0

并非完全回答您的问题,但在您的情况下,我会将租赁时间限制为几个小时,同时安装的应用的后台服务应该每隔几个小时唤醒一次,以延长租赁时间。这样低频率不会产生任何可见的功耗或数据流量影响。当然,为了避免可能的冲突,租约时间应是更新时间的几倍(例如,租赁24小时/每8小时更新一次)

另一种选择可能是使您的应用程序具有试用期+应用内购买,以使其永久。


将应用程序免费,然后要求在应用内购买付款的方式在技术上可行。我尝试过这种方式,但是被一些期望完全可用的应用程序的人淹没了负面评价。从一开始就收费可以避免那些误解应用程序"可用"而不需要进一步支付的困惑用户进行下载。此外,我不能让应用程序在后台运行。虚拟专用服务器需要保持运行状态,即使他们关闭了手机/设备数天。 - beetree

0

我所看到的唯一经济实惠的解决方案是在应用程序内部请求“兴趣确认” ,在两个小时过后。

流程如下:

00:00 用户购买应用 00:05 用户提供其电子邮件地址并注册 00:10 VPS已激活。用户被告知需要进行COI确认并予以确认。 00:30 用户请求退款

02:05 远程服务器发送友好提醒电子邮件,“嘿,您需要确认您的兴趣才能获得您的30天。”

03:00 没有COI,VPS将被暂停/停止,等待删除。

仍安装应用程序的用户将很少遇到问题,因为在宽限时间过期之前按钮无效。也许您甚至可以设置定时警报?

关闭应用程序的应用程序用户并且不检查电子邮件的用户(我们称之为“G组”),他们将不得不重新创建VPS。但是他们被警告了,对吧?他们无法访问电子邮件,但是应用程序本身怎么样?

尝试再次下载应用程序的用户需要登录与之前相同的帐户。您可以轻松识别他们。

您还可以进一步减少用户的麻烦,这取决于Play Store报告的及时性(我忽略了这一点)。假设您被告知退款会有延迟,但保证不超过X分钟。这意味着,如果在任何给定的时刻至少120+X分钟内没有退款通知,则早于120+X分钟创建且COI仍处于待处理状态的所有VPS都已经确认,它们的待处理状态可以安全地清除,无需用户操作。因此,所有Group G用户在评估应用程序时,如果恰好没有其他人同时请求退款,他们将仍然不会受到任何不良影响。

话虽如此,我觉得Google不允许应用程序查询“我是如何诞生的?”(带有应用程序和设备ID),并在合理的时间范围内收到自己的订单ID(或下载ID或唯一生成的ID)回复,这似乎相当奇怪。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接