การล้างการซื้อจากแซนด์บ็อกซ์การซื้อในแอป iOS สำหรับผู้ใช้ทดสอบ


116

ใครมีความคิดเกี่ยวกับวิธีรีเซ็ตและ / หรือล้างแซนด์บ็อกซ์การซื้อในแอปของ iOS หรือไม่?

ฉันมีแอปที่กำลังทดสอบกับแซนด์บ็อกซ์และฉันต้องการทดสอบการซื้อใหม่โดยไม่ต้องสร้างผู้ใช้ทดสอบใหม่ทุกครั้งที่ซื้อสินค้า

ถ้าฉันไม่ทำเช่นนี้ฉัน (แน่นอน) มักจะได้รับข้อความว่ามีการซื้อรายการซื้อในแอปแล้วเมื่อฉันคลิกที่ปุ่มซื้อของแอป

คำตอบ:


75

IMO มี 3 สิ่งที่คุณสามารถทำได้เพื่อให้การทดสอบที่ไม่สิ้นเปลืองสามารถทนได้:

  1. คุณสามารถมีบัญชีทดสอบหลายบัญชีที่เชื่อมโยงกับอีเมลเดียว Gmail สำหรับตัวอย่างที่ช่วยให้คุณสามารถเพิ่ม "บวก" สตริงอีเมลเพื่อสร้างนามแฝงสำหรับที่อยู่ดังนั้นtester+01@gmail.comและทั้งสองจริงๆเพียงแค่ไปที่tester+02@gmail.com tester@gmail.comโฮสต์อีเมลอื่นอาจทำเช่นเดียวกัน เมื่อคุณสร้างบัญชีทดสอบคุณจำเป็นต้องแนะนำชื่อนามสกุลที่อยู่อีเมลรหัสผ่านคำถามลับคำตอบลับวันเดือนปีเกิดและประเทศของ iTunes Store คุณสามารถใส่ข้อมูลเดียวกันทั้งหมด (รวมถึงรหัสผ่าน) สำหรับtester+01@gmail.comและ tester+02@gmail.comและคุณจะมีบัญชีทดสอบสองบัญชี สุดท้ายในtester@gmail.comกล่องจดหมายของคุณคุณจะได้รับอีเมลยืนยันสองฉบับจาก Apple เพื่อยืนยันบัญชีทดสอบทั้งสองบัญชี

  2. บอกว่าคุณมี ID ผลิตภัณฑ์ @ "Extra_Levels" ที่ไม่สิ้นเปลือง แทนที่จะเขียน @ "Extra_Levels" ในทุกวิธี (requestProduct, purchaseProduct, ... ) เพียงแค่เขียนPRODUCT_ID1และใส่ไฟล์ส่วนหัวบางไฟล์#define PRODUCT_ID1 @"Extra_Levels"(โดยไม่มีเครื่องหมายอัฒภาค!) จากนั้นตัวประมวลผลก่อนจะค้นหา PRODUCT_ID1 และแทนที่ด้วย @ "Extra_Levels" จากนั้นการสร้างใหม่ที่ไม่สิ้นเปลืองชื่อ @ "Extra_Levels_01" และการเปลี่ยน #define จะดีพอ ๆ กับการรีเซ็ตการซื้อสำหรับผู้ใช้ทดสอบทั้งหมดของคุณ

  3. ดังที่แอปพลิเคชันชี้ให้เห็นคุณสามารถทดสอบพฤติกรรมที่ถูกต้องของโค้ดของคุณเมื่อคุณซื้อ IAP ที่ไม่สิ้นเปลืองโดยใช้ IAP ที่สิ้นเปลืองก่อน (เพื่อให้ผู้ใช้ทดสอบสามารถซื้อสินค้าได้มากเท่าที่จำเป็น) เพื่อกำจัดข้อบกพร่องบางอย่าง แน่นอนว่าคุณควรทดสอบโค้ดด้วย IAP ที่ไม่สิ้นเปลืองจริงหลังจากนั้น


17
ว้าวฉันไม่เคยรู้เกี่ยวกับฟีเจอร์ลับสุดยอดของ Gmail นี้เลย มีประโยชน์อย่างไร!
bobobobo

4
ฉันเพิ่งพบว่าคุณไม่จำเป็นต้องยืนยันอีเมลผู้ใช้ทดสอบของคุณ คุณสามารถใส่ 123@123.com พร้อมระบุรหัสผ่าน (ซึ่งคุณจะยังคงใช้รหัสผ่านในโหมดแซนด์บ็อกซ์) และยังใช้งานได้ ฉันเพิ่งทดสอบเมื่อคืน
sooon

3
เคล็ดลับ PLUS SIGN สำหรับอีเมลแทนไม่ใช่สิ่งที่ GMail เพียงอย่างเดียว เป็นประเพณีเก่าแก่มากในบรรดาเซิร์ฟเวอร์อีเมลย้อนหลังไปหลายทศวรรษ แต่ไม่เคยรวมอยู่ในข้อกำหนดทางอีเมลใด ๆ ดังนั้นให้ทดสอบกับเซิร์ฟเวอร์อีเมลเฉพาะของคุณเพื่อให้แน่ใจว่าเข้าใจคุณสมบัตินี้
Basil Bourque

2
ฉันคิดว่าเป็นไปไม่ได้ที่จะล้างการซื้อในแอปสำหรับบัญชีทดสอบ;) Viva Apple :)
BartłomiejSemańczyk

12
+ไม่สามารถใช้ที่อยู่อีเมลเพื่อสมัคร Apple ID ได้อีกต่อไป
pkamb

32

คุณไม่สามารถทำสิ่งนี้ได้เท่าที่ฉันรู้ แบ็กเอนด์ของแซนด์บ็อกซ์ทำงานเหมือนบัญชีจริง - เมื่อซื้อแล้วจะซื้อ (และคุณสามารถทดสอบการกู้คืนได้) คุณควรพัฒนาส่วนใหญ่ด้วยการจัดเก็บข้อมูลจากนั้นเมื่อคุณทำการทดสอบจริงเพียงแค่คาดหวังว่าจะสร้างบัญชีทดสอบหลายบัญชี


3
เห็นด้วยกับ samvermette นี่คือถั่วที่การทดสอบทำงานได้ใกล้เคียงกับร้านค้าจริง อย่างน้อยต้องมีวิธีล้างการซื้อในแซนด์บ็อกซ์ หากต้องการซื้อสินค้าหลายรายการสำหรับผู้ใช้รายเดียวกันเพื่อจุดประสงค์ในการทดสอบฉันได้เพิ่มประเภทวัสดุสิ้นเปลืองด้วย
appsmatics

4
@samvermette เท่านั้นที่แตกต่างก็คือคุณจะได้รับกลับมาจากร้านแอปแทนSKPaymentTransactionStateRestored SKPaymentTransactionStatePurchasedเนื่องจากคุณไม่ได้ใช้เงินจริงที่นี่เพื่อความตั้งใจและวัตถุประสงค์ทั้งหมดSKPaymentTransactionStateRestoredเท่ากับ 100% เท่ากับSKPaymentTransactionStatePurchasedการทดสอบ การรีเซ็ตสถานะแอปของคุณเป็น "ไม่ได้ซื้อ" นั้นขึ้นอยู่กับคุณจริงๆ (เพียงแค่ลบรายการพวงกุญแจที่เกี่ยวข้องหรืออะไรก็ตามที่คุณใช้แคชที่ "ผู้ใช้ซื้อ X")
bobobobo

10

ฉันมี 2 รายการในการซื้อแอป 1 สำหรับการผลิต และอื่น ๆ สำหรับการทดสอบ เมื่อฉันต้องการ "ล้าง" ฉันจะลบรายการในแอปและสร้างรายการใหม่ (15 วินาทีใน iTunes เชื่อมต่อและ 1 วินาทีเพื่อเปลี่ยนรหัสผลิตภัณฑ์ในรหัส)

ถ้าฉันไม่ต้องการทดสอบ "ผู้ใช้ใหม่" ฉันใช้การผลิตในรายการแอป


ใช่การทำสำเนาผลิตภัณฑ์ใหม่และเปลี่ยนชื่อผลิตภัณฑ์ในรหัส (น่าจะมี # กำหนดไว้แล้ว) ดูเหมือนจะเป็นวิธีที่ง่ายที่สุดสำหรับการทดสอบจริง
JulianSymes

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
     }
  }
}

คำถามเกี่ยวกับการใช้ตรรกะแอปของคุณ / การซื้อคืนนั้นง่ายมาก: หากคุณแคชการซื้อในพวงกุญแจให้ลบพวงกุญแจของคุณ หากคุณใช้วิธีอื่นเพียงแค่เปลี่ยนสถานะแอปในเครื่องของคุณเพื่อแสร้งทำเป็นเหมือนว่าผู้ใช้ไม่เคยซื้อมาก่อน การร้องขอไปยังกล่องโต้ตอบการซื้อยังคงเป็นเหมือนกันที่แตกต่างเพียงอย่างเดียวคือเมื่อคุณหมัดใช่มันจะช่วยให้คุณแทนSKPaymentTransactionStateRestoredSKPaymentTransactionStatePurchased


5

การลบแอพของคุณและการติดตั้งใหม่ยังใช้ได้กับการทดสอบแซนด์บ็อกซ์ ขึ้นอยู่กับแอพอย่างชัดเจน แต่ฉันกำลังทดสอบแอพที่สมัครสมาชิกซึ่งซื้อเฉพาะระหว่างการสมัครในขณะนี้ดังนั้นจึงเป็นวิธีที่ง่ายที่สุด


3

ตรวจสอบSimStoreKit มันเป็น "StoreKit เวอร์ชันจำลองของ iPhone สำหรับทดสอบ UI ของร้านค้าบน iPhone Simulator หรือแม้กระทั่งบนอุปกรณ์โดยไม่ต้องตั้งค่า IAP ใน Connect"

SimStoreKit ILSimSKTransactionsซื้อสินค้าร้านค้าในค่าเริ่มต้นของผู้ใช้ภายใต้คีย์ ดังนั้นเพื่อล้างการซื้อทั้งหมดคุณสามารถทำได้:

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"ILSimSKTransactions"]

ในเครื่องจำลองคุณสามารถลบแอปของคุณออกแล้วติดตั้งใหม่อีกครั้ง

ฉันใช้ SimStoreKit เพื่อดีบักหน้าร้านค้าของแอปสำเร็จก่อนที่จะทดสอบกับแซนด์บ็อกซ์ ความสวยงามของไลบรารีนี้คือสามารถตั้งค่าให้ใช้ชื่อคลาสเดียวกับเฟรมเวิร์ก StoreKit จริงได้ (โดยทำ#define ILSimReplaceRealStoreKit 1ก่อนทำ#include <ILSimStoreKit.h>)

ในไฟล์ต้นฉบับที่ฉันต้องการเข้าถึง StoreKit ฉันรวมไฟล์ส่วนหัวนี้:

#import <TargetConditionals.h>

#if TARGET_IPHONE_SIMULATOR
    #define kILSimAllowSimulatedStoreKit 1
    #define ILSimReplaceRealStoreKit 1
    #import <ILSimStoreKit.h>
#else
    #import <StoreKit/StoreKit.h>
#endif

สิ่งนี้มีผลกับการใช้ SimStoreKit เมื่อฉันรันบนโปรแกรมจำลองและ StoreKit จริงเมื่อฉันเรียกใช้บนอุปกรณ์


ไม่สามารถใช้งานได้ ฉันได้รับข้อผิดพลาดในการสร้าง ฉันคัดลอกไฟล์ทั้งหมดใน zip ลงในโปรเจ็กต์ของฉันและแทนที่ #import <StoreKit / StoreKit.h> ทั้งหมดด้วย #define ILSimReplaceRealStoreKit 1 #import "ILSimStoreKit.h"
Jay Q.

คุณเพียงแค่ต้องการไฟล์ที่ขึ้นต้นด้วย ILSimSK สิ่งอื่น ๆ สำหรับแอปสาธิต บางทีคุณควรโพสต์คำถามพร้อมข้อผิดพลาดที่คุณได้รับ "ฉันได้รับข้อผิดพลาดในการสร้าง" ไม่ได้พูดอะไรมาก
Emile Cormier

-1

อีกทางเลือกหนึ่งในการสร้างโซลูชันผู้ใช้ทดสอบหลายรายการคุณสามารถสร้างการทดสอบหลายรายการในการซื้อแอพใน iTunes Connect จากนั้นคุณไม่จำเป็นต้องเปลี่ยนบัญชีผู้ใช้


1
เหตุผลในการโหวตดาวน์คือ 1. ไม่ใช่วิธีแก้ปัญหาที่ดีเนื่องจากคุณอาจพยายามทดสอบโซลูชันการซื้อในแอปเฉพาะที่อาจต้องใช้สถานการณ์จำนวนมากด้วยการลงชื่อเข้าใช้ของผู้ใช้แอปพลิเคชันและความพร้อมใช้งานของเนื้อหาข้ามอุปกรณ์ / แพลตฟอร์ม 2. มันเป็นเรื่องที่น่าเบื่อ (infact more) ในการสร้างการซื้อทดสอบหลายครั้งเหมือนกับการสร้างบัญชีทดสอบหลายบัญชี 3. นอกจากนี้คำตอบยังมีรูปแบบไม่ดีนัก
mickeymoon

-1

เพียงแค่ใช้บัญชีทดสอบเดิมต่อไปโดยเรียกคืนการซื้อแทนที่จะทำรายการใหม่ให้เสร็จสิ้น ท้ายที่สุดไม่ว่าคุณจะเริ่มการซื้อใหม่หรือกู้คืนรายการเก่าแอปของคุณจะทำสิ่งเดียวกัน (อย่างน้อยในตอนแรกอินเทอร์เฟซผู้ใช้อาจอัปเดตแตกต่างกันเมื่อเสร็จสิ้น) Apple เป็นผู้ที่จัดการกับสิ่งต่าง ๆ ในสถานการณ์ที่แตกต่างกัน - ไม่ต้องกังวลไป

วางตรรกะการจัดส่งของคุณในกรณี SKPaymentTransactionStateRestored ภายในการใช้งานวิธีนี้สำหรับการทดสอบ:

- (void)paymentQueue:(SKPaymentQueue *)queue
 updatedTransactions:(NSArray *)transactions;

จากนั้นอย่าลืมใส่ตรรกะการจัดส่งนั้นลงในเคส SKPaymentTransactionStatePurchased

ในตอนท้ายเนื่องจากพวกเราส่วนใหญ่หมกมุ่นอยู่กับระดับที่แตกต่างกันให้ทำการทดสอบขั้นสุดท้ายด้วยบัญชีใหม่ (ไม่ใช่เรื่องใหญ่ที่จะทำการทดสอบครั้งที่สองเพื่อความมั่นใจอย่างแท้จริง)

สิ่งสุดท้ายที่ควรทราบ: พิจารณาตำแหน่งของ Apple หากมีปัญหากับนักพัฒนาที่ต้องเสียเวลาสร้างบัญชีหลายสิบหรือหลายร้อยบัญชีเพื่อทดสอบ IAP อย่างละเอียดพวกเขาจะแก้ปัญหาได้ ไม่มีปัญหา.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.