从测试用户的IOS应用内购买沙箱中清除购买

Ran*_*per 109 iphone in-app-purchase ios

有没有人对如何重置和/或清除IOS应用内购买沙箱有任何想法?我有一个应用程序,我正在测试沙盒,我想测试新的购买,而不必每次购买时都创建一个新的测试用户.如果我不这样做,那么我(当然)总是会收到一条消息,当我点击我的应用程序的购买按钮时,已经购买了应用程序内购买项目.

Rob*_*gar 70

IMO有三件事可以让非耗材测试变得可以忍受:

  1. 您可以将多个测试帐户与一封电子邮件相关联.(例如Gmail),您可以添加一个"加"字符串的邮件创建一个地址别名:那么tester+01@gmail.comtester+02@gmail.com这两个真的只是去tester@gmail.com.可能其他电子邮件主机也这样做.当您创建测试帐户时,您需要介绍:名字,姓氏,电子邮件地址,密码,秘密问题,秘密答案,出生日期和iTunes商店国家/地区.您可以为tester+01@gmail.com和设置完全相同的数据(包括密码), tester+02@gmail.com并且您将拥有两个测试帐户.最后,在您的tester@gmail.com收件箱中,您将收到Apple提供的两封验证电子邮件,以确认这两个测试帐户.

  2. 假设您有一个产品ID为"Extra_Levels"的非消耗品.不要在所有方法(requestProduct,purchaseProduct,...)中编写@"Extra_Levels",只需编写PRODUCT_ID1并在某些头文件中放入#define PRODUCT_ID1 @"Extra_Levels"(没有分号!),然后预处理器将搜索PRODUCT_ID1并将其替换为@"Extra_Levels".然后创建一个名为@"Extra_Levels_01"的新非耗材并更改#define将与重置所有测试用户的购买一样好.

  3. 应用程序指出,您可以通过首先使用耗材IAP购买非耗材IAP来测试代码的正确行为(以便测试用户可以根据需要进行尽可能多的购买)以消除一些错误.当然,您还应该使用真正的非消耗性IAP测试代码.

  • 哇,我从来不知道这个超级秘密的Gmail功能.有用! (15认同)
  • 我刚刚发现您并不需要验证测试用户的电子邮件.您可以简单地将123@123.com与指定密码(您仍将在沙箱模式下使用密码)放在一起,它仍然有效.我昨晚刚刚测试过. (4认同)
  • 电子邮件别名的PLUS SIGN技巧不仅仅是一个GMail的东西.这是电子邮件服务器中一种非常古老的传统,可追溯到几十年前 但它从未被纳入任何电子邮件规范.因此,请使用您的特定电子邮件服务器对其进行测试,以确保它具有此功能. (3认同)
  • 我认为不可能清除测试帐户的应用内购买;) Viva Apple :) (2认同)
  • +电子邮件地址不能再用于注册Apple ID。 (2认同)

kir*_*ski 32

您可以清除测试者的购买历史记录,以便可以继续使用同一沙盒 Apple ID 进行持续测试。清除购买历史记录将删除沙盒环境中所选测试人员过去购买的所有自动续订订阅和非消耗品。客户在 App Store 上进行的应用内购买不受影响。

要清除测试仪购买历史记录:

从“用户和访问”中的“沙箱”下,单击“测试人员”。

单击编辑。

在此输入图像描述

选中您要修改的每个测试仪的复选框,然后单击清除购买历史记录。

在此输入图像描述

在出现的对话框中单击“清除购买历史记录”。

在此输入图像描述

购买次数较多的沙盒 Apple ID 可能需要更长时间才能清除。此操作无法撤消。


Ben*_*tto 31

据我所知,你不能这样做.沙盒后端的工作方式与真实帐户相同 - 一旦购买,就会购买(因此您可以测试还原).您应该在商店内容中填充大部分开发,然后当您真正测试它时,只需要创建多个测试帐户.

  • @samvermette _唯一的区别是你从应用程序商店返回`SKPaymentTransactionStateRestored`,而不是`SKPaymentTransactionStatePurchased`.既然你没有在这里使用真钱,那么就所有意图和目的而言,就测试而言,`SKPaymentTransactionStateRestored`相当于`SKPaymentTransactionStatePurchased`.将您的应用状态重置为"未购买"取决于您(只需删除相关的钥匙串条目或用于缓存"用户购买X"的任何内容) (3认同)
  • 同意samvermette,这是坚果,它的测试与真实商店非常接近。至少必须有一种清除沙箱中购买的方法。为了测试同一位用户进行多次购买,我还添加了一个Consumable类型。 (2认同)

use*_*951 8

我有2个应用程序购买项目.1用于生产.另一个用于测试.当我需要"清除"时,我删除了在应用程序项目并创建了新项目(在iTunes中连接15秒,在代码中更改产品ID为1秒)

如果我不需要测试"新用户",我在app项目中使用生产.


bob*_*obo 7

嗯,从技术上讲,你不需要那样做.

如果你得到SKPaymentTransactionStateRestored,它100%相当于验证用户并授予他购买的应用商店.我有一个像这样的开关:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
  for( SKPaymentTransaction *purch in transactions )
  {
    switch( purch.transactionState )
    {
      case SKPaymentTransactionStateRestored:
        info( "PURCHASE RESTORE" ) ;
        // fall thru
      case SKPaymentTransactionStatePurchased:
        [[SKPaymentQueue defaultQueue] finishTransaction:purch];
        // Do regular changes to app state for this purchase,
        // register in keychain, etc.
        break ;

       //.. other cases
     }
  }
}
Run Code Online (Sandbox Code Playgroud)

让您的应用程序逻辑/收回购买的问题很简单:如果您在钥匙串中缓存购买,请删除您的钥匙串.如果您正在做其他一些方法,只需更改您的本地应用程序状态,假装用户以前从未购买过它.购买对话框的请求仍然完全相同,唯一的区别是当你点击YES时,它会给你SKPaymentTransactionStateRestored而不是SKPaymentTransactionStatePurchased.


Chr*_*sen 7

删除您的应用程序并重新安装也适用于沙盒测试。显然取决于应用程序,但我正在测试基于订阅的应用程序,该应用程序目前仅在注册期间购买,因此它是最简单的解决方案。