google 订阅和apple 订阅回调如何标示用户信息。
谷歌订阅苹果订阅和国内订阅的区别
国内支付
关于国内的微信或支付宝支付我们拉起支付时都可以传一个自定义字段,在付款成功后会对我们进行回调。将自定义字段带回来,这样我们就能够知道是哪个用户付款了付了多少钱。也方便我们下发相应的权益。
国外支付
apple 的订阅标示字段则是一个固定的字符串,是标示某一位用户的。以flutter 框架为例客户端需要一个application_user_name 的值,apple的必须是uuid '0a4b4f52-9377-455c-8fd0-9aaa8e4cb7fd' 而且要是带横杠的这种格式
这里需要注意的是:以apple 订阅为例,你拉起5次订阅传入了5次不同的uuid,但是苹果回调只会回调你第一次传入的uuid。(是的,你没有听错只回调你第一次传入的uuid)application_user_name 相当于用户标示了。
google 的订阅一样需要一个固定标示来确定是哪个用户,以flutter 框架为例客户端也需要一个application_user_name 的值,但google订阅可以不是uuid,只要能区分出是哪个用户即可。为了方便我们一样用uuid来标示用户。
同样也需要注意的是,以google 订阅为例你拉起5次不同的订阅传入5次不同的uuid,你猜会怎么样?(答案是只有第一次会订阅成功) 你没有听错只有第一次会订阅成功,其他的时候会报错可能是以下错误,这些类似的错误我查了好久也没有答案。就很奇怪,为什么只能订阅成功一次,再次订阅和订阅升级就会失败。清缓存、重装应用、重启等操作试过无数次。 不经意间发现原来每次是要传入的值。这里还要多说下,如果你传入了不同的值,第二次以后订阅会失败。这时候你不要着急,你需要等。可能是要等1天 3天 或7天,可能是和你的订阅周期有关系。
如果保证每次传入的都是固定的uuid 值呢,我们的做法是在用户登陆的时候增加一个字段application_user_name,这个字段的值是uuid形式,以后用户每次付款都会回调这个值,我们就能够知道是哪个用户了。
下面是apple订阅回调的数据其中 appAccountToken 是我们传入的用户标示
{ "notificationType": "DID_RENEW", "notificationUUID": "4cd4b8c6-bbec-4d6a-87e7-304a39893a6e", "data": { "appAppleId": 6476479961, "bundleId": "com.hkaigc.xxx", "bundleVersion": "13", "environment": "Sandbox", "signedTransactionInfo": { "transactionId": "2000000573226701", "originalTransactionId": "2000000553488414", "webOrderLineItemId": "2000000057905247", "bundleId": "com.hkaigc.xxx", "productId": "weekly", "subscriptionGroupIdentifier": "21440779", "purchaseDate": 1713262022000, "originalPurchaseDate": 1711173013000, "expiresDate": 1713262202000, "quantity": 1, "type": "Auto-Renewable Subscription", "appAccountToken": "5a6f2b91-484d-447b-ba2c-7760a8f812dc", "inAppOwnershipType": "PURCHASED", "signedDate": 1713262031122, "environment": "Sandbox", "transactionReason": "RENEWAL", "storefront": "CHN", "storefrontId": "143465", "price": 22000, "currency": "CNY" }, "signedRenewalInfo": { "originalTransactionId": "2000000553488414", "autoRenewProductId": "weekly", "productId": "weekly", "autoRenewStatus": 1, "signedDate": 1713262031122, "environment": "Sandbox", "recentSubscriptionStartDate": 1713260125000, "renewalDate": 1713262202000 }, "status": 1 }, "version": "2.0", "signedDate": 1713262031154 }
下面是google 订阅回调的数据 其中externalAccountIdentifiers.obfuscatedExternalAccountId 是我们传入的用户标示
{ "kind": "androidpublisher#subscriptionPurchaseV2", "startTime": "2024-04-22T07:35:04.525Z", "regionCode": "JP", "subscriptionState": "SUBSCRIPTION_STATE_EXPIRED", "latestOrderId": "GPA.3365-9772-5550-84989..5", "canceledStateContext": { "systemInitiatedCancellation": {} }, "testPurchase": {}, "acknowledgementState": "ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED", "externalAccountIdentifiers": { "obfuscatedExternalAccountId": "7cff882d-b307-40ef-a097-be1517052720" }, "lineItems": [{ "productId": "weekly_1", "expiryTime": "2024-04-22T08:08:55.347Z", "autoRenewingPlan": {}, "offerDetails": { "basePlanId": "weekly-1" } }] }