iOS开发之内购-内购时遇到的问题和解决办法-In App Purchase

这篇文章主要针对,上篇的iOS开发之内购-AppStore中,In App Purchase的问题和解决办法。

我要在app里添加IAP,必须要注册自己的产品标识符(product identifiers)。产品标识符是什么?

产品标识符(Product Identifiers)是一串字符串,它用来识别你在应用内贩卖的每件商品。App Store用产品标识符来检索产品信息,标识符只能包含大小写字母(A-Z)、数字(0-9)、下划线(-)、以及圆点(.)。你可以任意排列这些元素,但我们建议你创建标识符时使用反向域名,比如com.companyname.application.productid
备注:产品标识符和Apple ID以及Bundle ID没有关系,它们看起来可能比较像Bundle ID,但是两者是不一样的。所以,在代码里你不能用Apple ID或者Bundle ID代替产品标识符。

怎么创建产品标识符?

IAP表单(TheIn-App Purchases form)是用来生成IAP产品的,它包含了产品ID的字段,这个字段必须要填到表里。这个字段可以为你的产品指定产品标识符。你可以按下面的步骤来创建产品标识符:
1.登入iTunes Connect, 点击主页面上的Manage Your Applications模块。
2.进入Manage Your Apps 页面,你可以看到你所有的应用列表。选择你想要创建IAP的产品的app,在下个页面中点击Manage In-App Purchases按键,然后在点击创建。
3.选择IAP产品的类型。iTunes Connect会带你进入IAP表单,在这个表单里有“保存”按键。完整填写Product ID以及表单里的其他字段。
注意事项:产品标识符一旦创建无法修改,此外,如果应用审核没有通过,这个产品标识符也无法再次使用。

如何在app中如何使用产品标识符?

首先创建SKProductsRequest,然后把产品标识符列表传至initWithProductIdentifiers来读取产品信息。

当在Sandbox 环境测试In-App Purchase 时,为什么我得到的是“Payment requests are restricted to products returned as valid via Store Kit’s didReceiveResponse method”错误信息?

执行In-App Purchase的app的用户界面必须有App Store允许的可供购买的产品。在你决定在用户界面展示用于购买的产品之前,你的app必须先向App Store发送一个产品请求。

StoreKit提供了两种支付支付请求的解决办法:

[SKPayment paymentWithProductIdentifier:PRODUCT_ID] [SKPayment paymentWithProduct:YOUR_SKPRODUCT_OBJECT] 苹果建议您使用 [SKPayment paymentWithProduct:YOUR_SKPRODUCT_OBJECT]使用这个方法可以确保你一直处于有效的产品支付请求状态,同时也确保用户可以购买你的产品。 所以,务必只展现App Store返回的产品信息。了解更多有关于app内产品展现信息,请查看In-App Purchase 编程指南的Feature Delivery部分。

In-App Purchase有几种类型?

In-App Purchase共有3中类型

Consumable:一次性购买,最简单的类型,不用保存历史记录。
Nonconsumable:每个产品,用户只买一次,此后就可以在自己的所有设备上看到该产品。
Subscriptions:订阅模式允许多次购买末一个产品,但是购买后,用户可以在自己的所有设备上看到该产品。

iOS 中使用 IAP 方式在程序内购买的内容在重装系统后还需要再次购买吗? 比如Camera+内的滤镜。

不必。以 Camera+ 为例,Menu 里最下方的选项 Restore purchases 即可帮你解锁已经购买的滤镜。任何实现了 IAP 功能的 App 基本都会提供这一选项,或者在第二次购买时提示已购。
消耗类(如游戏金币)需要购买。 功能类不需要购买,有些应用提供“Restore purchases”,没有的可以再次尝试购买,会提示已付费。

IAP 能做限时免费吗? 想做一个免费下载、部分内容免费,但是阅读更多内容需要付费解锁的阅读应用。这样可以把IAP的价格限时免费为0吗?

可以的,你可以设定价格为0时就不走IAP了。

创建产品ID的时候,选择多少钱的时候选错了,程序还未提交,还能修改吗?

可以的,在应用程序的信息中。

升级iOS5 GM的过程中恢复备份出了问题,导致In-App Purchase也丢失了。有没有办法恢复? 在iPad上曾经进行过一些In-App Purchase,但是在升级iOS5 GM的过程中恢复备份出了问题,导致除了恢复升级前的所有应用程序之外,其余个人信息一概丢失。iTunes上可以查询到购买记录。具体来说,买的是Splashtop的把iPad作为第二显示器的软件,Xdisplay。

In-App Purchase 分好几种,最常见的是 Non-Consumable,就是只需要用户购买一次的。如果是这种类型的,再购买一次同一个商品就能够恢复了,不会收取额外费用。如果 app 做得好的话,应该提供一个 Restore 功能,以专门恢复以前购买过的 Non-Consumable 的商品。

在iTunes Connect中每个应用可以创建多少个IAP产品ID?

请参阅iTunes Connect Developer Guide的注册IAP部分

在iTunes Connect里找不到Manage In-App Purchase (管理IAP)按键怎么办?

以下是可能导致“Manage In-App Purchase”按键无法使用的原因

a.不是iTunes Connnect的管理员(Admin)或开发者(Technical)账号。
b.没有同意最新的iOS或Mac开发者许可协议。
c.最新的付费应用协议(Paid Applications contract)没有生效

必须上传程序的二进制码才能测试IAP吗?

没有这个必要。
重要事项:除非你的应用已经做好了接受苹果审核的准备,否则请不要上传Development Binary至iTunes Connect。如果iTunes Connect里的二进制编码不完整,二进制编码被拒的可能性很大。一旦二进制编码通过审核,就可以测试In-App Purchase功能了。

出现了“您的账号信息已变”错误怎么办?

“您的账号信息已变”错误出现的原因是在测试IAP的时候你使用的是设备的测试账号。解决方法是退出账号,然后在iTunes Connect创建一个新的测试账号,使用新的测试账号来测试IAP。

为什么我的产品标识符在invalidProductIdentifiers中被退返?

有可能是以下原因:

a.没有填完财政需求表(请参阅本文档的“合同、税务以及银行信息”部分)
b.没有使用正确的App ID。
c.没有使用正确的与App ID紧密关联的Provisioning Profile
d.代码中没有使用正确的产品标识符。更多产品标识符的信息请参阅技术问答,第1329条—IAP产品标识符。
e.你没有清除iTunes Connect中促销的IAP产品。
f.也许你已经修改了你的产品,但它没有在App Store的服务器中生效。
g.苹果拒绝了你最新向iTunes Connect提交的二进制码。

出现了“你已购买本商品,但商品没有被下载”错误怎么办?

你的应用没有调用SKPaymentQueue ‘s finishTransaction。调用finishTransaction:允许你从支付队列中移除交易。

出现“你已成功购买,点击‘确认’再次进行免费下载”错误怎么办?

这个信息是个提醒,不是错误。这表明你试图购买一个你已经购买了的非消耗性产品。购买一个非消耗性的产品时不会被扣费。

调用 payment queue的 restoreCompletedTransactions: 方法不能恢复app的任何产品。

可能由于以下原因:

你没有任何先前购买过的非消耗类产品。
你试图恢复的订阅产品或者非消耗类产品是不可恢复的类型。
restoreCompletedTransactions:方法只能恢复非消耗类产品。
注意: 在没有可恢复产品的情况下,Store Kit不会调用paymentQueue:updatedTransactions:方法。

应该什么时候恢复In-App Purchase产品?

在以下两种情况下你可以恢复自动更新的订阅产品和非消耗类产品:

a.在客户其他设备上安装
b.在删除了关联应用的其他设备上重新安装

如何解决“这不是测试用的用户账号,请在Sandbox环境下创建一个新的账号”的问题?

出现这个错误的原因是在确认购买信息时你使用的是iTunes用户账号。解决的办法是退出账号,然后使用你的IAP测试账号。

回单(receipt )核实失败,并且出现字符串 (iOS)。

可能有以下几个原因:

a.在你的iOS app里,你没有使用64位编码对回单数据进行编码,
b.没有有效的回单,你的回单大概使用了等号隔开键和值,用分号隔开了关键字。
c.有效的回单使用冒号来隔开键和值,用逗号隔开关键字,

下表是有效的回单样本


receipt: { “signature” : “…”, “purchase-info” : “…”, “pod” : “…”, “signing-status” : “…” }

我更新了使用In-App Purchase的iOS app,如何对它进行测试呢(iOS)?

不管更新后的app是否正确执行地了In-App Purchase,如果你要测试的话就按照以下步骤:

通过Ad Hoc Distribution方式安装原始app。
通过Ad Hoc Distribution方式安装更新后的app来验证它是否完全覆盖了原始的app。
试着从更新后的app中执行In-App Purchase。

我应该使用哪个url核实回单(receipt)(iOS)?

在sandbox环境测试app时使用 sandbox URL ,当应用处于审核状态时也可以使用这个URL:https://sandbox.itunes.apple.com/verifyReceipt 使用产品 URL 一旦你的app上架App Store,你就要用产品URL: http://buy.itunes.apple.com/verifyReceipt

如何核实receipt(iOS)?

第一次一般使用产品的URL核实收据。如果你收到一个21007状态代码,那么接下来要用sandbox URL。当app处于测试状态或者在sandbox环境下进行检测,或者上架App Store,你可以使用这种方法,从而避免在URL之间进行切换,
注明:21007 状态码表明receipt是一个sandbox receipt。

Tags:
文 / yimouleng
LEAVE A REPLY
总访问数 960
loading