接IOS支付的时候很顺利,接谷歌支付的时候走了很多弯路,在这里记录下来:
1,首次发布谷歌支付账号的时候,需要在权限中添加com.android.vending.BILLING。具体是在AndroidManifest中添加
<uses-permission android:name="com.android.vending.BILLING" />
2,只有支付审核通过的包,才能拉起支付信息!!!
3,支付demo可以在编辑器运行,价钱都是0.01,支付会直接调取成功回调:如果走不通,检查下逻辑问题,比如说网络线程里面调用了主逻辑里面的函数之类。
4,支付需要确认回调,否则商品扣款会在三天后返回到玩家账户~~
//购买成功的回调
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs e)
{
SetCurrentProductID(e.purchasedProduct.definition.id);
ConfirmPendingPurchase();
Debug.Log("unity receipt:" + e.purchasedProduct.receipt);
BuySuccess();
return PurchaseProcessingResult.Pending;
}
/// <summary>
/// 确认服务器数据保存成功
/// </summary>
/// <param name="productId"></param>
public void ConfirmPendingPurchase()
{
Debug.LogError("Error!!! : unity确认支付完成:" + currentProductId);
controller.ConfirmPendingPurchase(controller.products.WithID(currentProductId));
}
4,对于支付成功返回的数据,Unity提供有解析的方法,即:
MiniJson.JsonDecode
这些代码提供的信息,或许对你接入 AppsFlyer等数据SDK有帮助:
var receipt = (Dictionary<string, object>)MiniJson.JsonDecode(e.purchasedProduct.receipt);
var store = (string)receipt["Store"];
var transactionID = (string)receipt["TransactionID"];
var payload = (string)receipt["Payload"];
var details = (Dictionary<string, object>)MiniJson.JsonDecode(payload);
var receiptJson = (string)details["json"];
var signature = (string)details["signature"];