美文网首页
Unity: IAP(4.0+), GooglePlay Pay

Unity: IAP(4.0+), GooglePlay Pay

作者: Danny_Yan | 来源:发表于2022-10-11 17:49 被阅读0次

在使用IAP进行支付时,基本都要用到payload,才能方便的绑定和检查支付人的信息,避免代充等操作.

安卓平台下:

GooglePlay支付结算库在3.0开始就不支持payload(https://developer.android.google.cn/google/play/billing/developer-payload),其推荐使用setObfuscatedAccountId()(https://developer.android.com/google/play/billing/security).实际上就是变相的把payload的功能更明确化:一个混淆的指向性ID,并用一个单独的方法来进行设置. 该值还是会回传给我们自己的服务器(服务器进行远程验证时会得到此值).

IAP代码中controller.InitiatePurchase(productID, payload),传入也变得无效.
同时IAP也不再推荐使用google的"Unity结算库插件"(https://developer.android.com/google/play/billing/unity#abstraction-layer), 如果引入该插件,并尝试执行流程中的 Fix, 就会报错.

IAP3.0版本使用SetObfuscatedAccountId()来进行同样逻辑的处理:(https://docs.unity3d.com/Packages/com.unity.purchasing@3.2/api/UnityEngine.Purchasing.IGooglePlayStoreExtensions.html):

// IExtensionProvider m_extensions
var ext  = m_extensions.GetExtension<IGooglePlayStoreExtensions>();
ext.SetObfuscatedAccountId(String)

IAP4.0开始,该函数移动到了ConfigurationBuilder中,变动日志为: https://docs.unity.cn/Packages/com.unity.purchasing@4.0/changelog/CHANGELOG.html

if (Application.platform == RuntimePlatform.Android)
{
    var config = m_builder.Configure<IGooglePlayConfiguration>(); 
   config.SetObfuscatedAccountId(payload);
}
// IStoreController m_controller
m_controller.InitiatePurchase(product, payload);

在每次购买前都调用SetObfuscatedAccountId(),传入不同的值,服务器在验证时均能收到正确的值.

如果使用订单混淆验证(UnityEngine.Purchasing.Security.CrossPlatformValidator),则需要用到GooglePlayTangle和AppleTangle类,该类是由IAP工具生成的,参考:
https://docs.unity3d.com/Packages/com.unity.purchasing@4.0/manual/UnityIAPValidatingReceipts.html

如果有出现Google提示要求版本为4以上的问题:
则手动编辑工程目录下的Packages/manifest.json,修改purchasing版本为4.5以上:
"com.unity.purchasing": "4.5.0",

转载请注明出处: https://www.jianshu.com/p/ad069f301ccd

相关文章

网友评论

      本文标题:Unity: IAP(4.0+), GooglePlay Pay

      本文链接:https://www.haomeiwen.com/subject/arztzrtx.html