我继续使用谷歌提供的应用内结算示例,我想用我服务器上的实现替换他们的安全类(正如他们所推荐的那样)。看起来我必须在我的服务器上调用实现来替换以下内容:
/**
* Verifies that the data was signed with the given signature, and calls
* {@link ResponseHandler#purchaseResponse(Context, PurchaseState, String, String, long)}
* for each verified purchase.
* @param startId an identifier for the invocation instance of this service
* @param signedData the signed JSON string (signed, not encrypted)
* @param signature the signature for the data, signed with the private key
*/
private void purchaseStateChanged(int startId, String signedData, String signature) {
// Instead of using the local version included on the client,
// this should be an http call to our server which has the
// implementation.
ArrayList<Security.VerifiedPurchase> purchases;
purchases = Security.verifyPurchase(signedData, signature);
if (purchases == null) {
return;
}
// Then the rest gets executed after the http response comes back.
...
confirmNotifications(startId, notifyIds);
所以我要替换上面的内容,当我从服务器得到响应时,我会运行confirmNotifications()位等。但是这里有很多东西可能出错,网络可能会丢失等等。所以我假设市场会一直向我发送消息,直到我成功执行confirmNotifications()位?
当我开始在我的服务器上进行验证时,有些事情发生了变化,我感到有些害怕,我得到了一大堆信用卡收费的用户,但看不到内容显示在他们的设备上。
另外,我认为我的应用程序盗版的线程非常低,但我担心将我的市场公钥嵌入客户端。如果我将来某天确实有一个受欢迎的游戏,攻击者可以查看我的一些旧应用程序并将其从中获取(不确定如果他们获得公钥会有多大的危险)。
由于
答案 0 :(得分:0)
是的,市场将继续发送您从未提交过确认通知的事件的通知,正如文档所说:
CONFIRM_NOTIFICATIONS: 此请求确认您的应用程序已收到购买状态更改的详细信息。 Google Play会向您的应用发送购买状态更改通知,直到您确认收到它们为止。
看here