IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> iOS内购,如何处理购买完,App挂掉,没有来得及交付商品的问题 -> 正文阅读

[移动开发]iOS内购,如何处理购买完,App挂掉,没有来得及交付商品的问题

例如:

  1. iOS内购输入完密码之后,切后台,杀进程,如何处理这次的购买
  2. iOS内购输入完密码之后,还没有交付商品,游戏挂掉了,如何处理这次的购买
  3. 当用户进入隧道前刚好购买了一个商品,然后进入了隧道,隧道内可能没有网络链接,那么如何处理这次购买

我碰到的问题是,在沙盒环境下,内购输入完密码之后没等系统回调购买成功界面,就切后台杀进程,然后再次打开应用之后系统没有回调任何信息,我的这次购买没有得到金币,而下次点击商店的购买按钮之后,没有弹出商品信息界面,而是直接购买成功。

我已知的情况是,当iOS内购成功后会回调App一些数据,拿着这些数据可以做验单,无论是客户端来做,还是发送到游戏服务器来做,也就是说IAP成功后会从Apple的服务器上拿到商品数据,这个数据是StoreKit拿到之后通过观察者回传给App的,如果在StoreKit拿到数据回传观察者之前进程被杀掉,那么我根据上面的信息我猜想手机系统会把这个数据保存住。下次什么时机随送给App或者App通过什么接口来查询有没有未被消费的数据。

通过阅读Apple Developer官网文档,找到了一些线索
Original API for In-App Purchase
https://developer.apple.com/documentation/storekit/original_api_for_in-app_purchase
Processing a Transaction
https://developer.apple.com/documentation/storekit/original_api_for_in-app_purchase/processing_a_transaction

Make sure that the observer is ready to handle a transaction at any time, not only after you add a transaction to the queue. For example, if a user buys something in your app right before going into a tunnel, your app may not be able to deliver the purchased content if there is no network connection. The next time your app launches, StoreKit calls your transaction queue observer again and your app should handle the transaction and deliver the purchased content. Similarly, if your app fails to mark a transaction as finished, StoreKit calls the observer every time your app launches until the transaction finishes.
翻译成中文
确保在任何时间观察者(SKPaymentTransactionObserver)都能够处理交易,不只是在你添加交易到队列之后。例如,当用户进入隧道前刚好在App内购买了一些东西,如果隧道内没有网络连接你的应用没有能力交付购买的内容。下一次你打开App的时候,StoreKit将会再次调用你的交易队列观察者并且此时你的应用应该处理交易以及下发购买的内容。同样的,当你的App标记一个交易为结束状态失败时,StoreKit会在每次应用打开的时候调用观察者(SKPaymentTransactionObserver)直到这个交易被标记为完成。

也就是说一个交易(transaction)完成的时候,应该把它标记为完成,如果没有被标记为完成每次打开App的时候StoreKit都会通知SKPaymentTransactionObserver

还有文档上说
Always register a transaction queue observer as soon as your app is launched, as shown below. For more guidance, see Setting Up the Transaction Observer for the Payment Queue.

- (BOOL)application:(UIApplication *)application
 didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    /* ... */
    [[SKPaymentQueue defaultQueue] addTransactionObserver:observer];
}

检查一下我的代码,我是用CocosPods集成的iOS IAP,我没有在这个方法里面注册 transaction queue observer

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-28 23:02:56  更:2021-12-28 23:04:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:19:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码