Pertanyaan Pembelian Dalam Aplikasi Apple


Saat menguji Pembelian Dalam Aplikasi di SANDBOX ENVIRONMENT pada perangkat, saya mencatat kesalahan berikut:

Kesalahan Domain = SKErrorDomain Code = 0 "Tidak dapat terhubung ke iTunes Store" UserInfo = 0x2916a0 {NSLocalizedDescription = Tidak dapat terhubung ke iTunes Store} .t

Saya dapat mengambil kembali id ​​produk yang saya daftarkan melalui iTunes Connect. Saya menampilkan data yang terkait dengan produk ini seperti pada tampilan tabel bersama dengan opsi Beli. Ketika saya mencoba untuk membeli suatu produk, sebuah transaksi dimulai tetapi tidak menanyakan kepada saya mengenai rincian pengguna uji dan saya mendapatkan kesalahan seperti yang disebutkan di atas.

Saya menyediakan kode yang saya terapkan.

    //the below code is for RETREIVING THE PRODUCT id's

#pragma mark Store kit
-(IBAction)sendProductInfoRequest{
NSLog(@"sendProductInfoRequest");

NSSet *identifiersSet=[NSSet setWithObjects:[NSString stringWithFormat:@"%@",@".15April2011"],[NSString                          stringWithFormat:@"%@",@"15April201102"],nil];
SKProductsRequest *productRequest=[[SKProductsRequest alloc] initWithProductIdentifiers:identifiersSet];
productRequest.delegate=self;
[productRequest start];
NSLog(@"completing sendProductInfoRequest");
}

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
NSLog(@"yoooo!");
NSLog(@"The product request didReceiveResponse :%@",[response description]);
NSLog(@"The products are :%@",[response.products description]);

NSLog(@"The invalidProductIdentifiers are:%@",[response.invalidProductIdentifiers description]);

NSArray *products=response.products;



for(SKProduct *currentProduct in products){

NSLog(@"THE Product price is :%@",currentProduct.price);
NSLog(@"THE Product description is :%@",currentProduct.localizedDescription);
NSLog(@"THE Product title is :%@",currentProduct.localizedTitle);
NSLog(@"THE Product's product identifier is :%@",currentProduct.productIdentifier);

}

}



/the BuyProducts method is called when user clicks buy button related to a particular product
-(IBAction)BuyProducts
{
if ([SKPaymentQueue canMakePayments])
{
[self makePaymentRequestForThisProduct:isbnText.text];
}

}



-(void)makePaymentRequestForThisProduct:(NSString*)productID

{
SKPayment *payment = [SKPayment paymentWithProductIdentifier:productID];  
[[SKPaymentQueue defaultQueue] addPayment:payment];
}



/I have added the transaction observer in applicationDidFinishLaunching method of AppDelegate
//Transaction Observer is a class

TransactionObserver *observer;
observer = [[TransactionObserver alloc] init];
[[SKPaymentQueue defaultQueue] addTransactionObserver:observer];

//the TransactionObserver.m class

@implementation TransactionObserver


- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
    for (SKPaymentTransaction *transaction in transactions)
    {

switch (transaction.transactionState)
        {
            case SKPaymentTransactionStatePurchased:
                [self completeTransaction:transaction];
                break;
            case SKPaymentTransactionStateFailed:
NSLog(@"failed transaction");
                [self failedTransaction:transaction];
                break;
            case SKPaymentTransactionStateRestored:
                [self restoreTransaction:transaction];
            default:
                break;
        }
    }
}

- (void) completeTransaction: (SKPaymentTransaction *)transaction
{
NSLog(@"successful purchase");
  //  [self recordTransaction: transaction];
//[self provideContent: transaction.payment.productIdentifier];
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}

- (void) restoreTransaction: (SKPaymentTransaction *)transaction
{
NSLog(@"restored incomplete transaction");
//   [self recordTransaction: transaction];
//   [self provideContent: transaction.originalTransaction.payment.productIdentifier];
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}

- (void) failedTransaction: (SKPaymentTransaction *)transaction
{

NSLog(@"The error description is:%@",[transaction.error description]);
if (transaction.error.code != SKErrorPaymentCancelled)
    {
if(transaction.error.code == SKErrorUnknown) {
NSLog(@"Unknown Error (%d), product: %@", (int)transaction.error.code, transaction.payment.productIdentifier);
UIAlertView *failureAlert = [[UIAlertView alloc] initWithTitle :@"In-App-Purchase Error:"
message: @"There was an error purchasing this item please try again."
  delegate : self cancelButtonTitle:@"OK"otherButtonTitles:nil];

[failureAlert show];
[failureAlert release];
}

if(transaction.error.code == SKErrorClientInvalid) {
NSLog(@"Client invalid (%d), product: %@", (int)transaction.error.code, transaction.payment.productIdentifier);
UIAlertView *failureAlert = [[UIAlertView alloc] initWithTitle :@"In-App-Purchase Error:"
message: @"There was an error purchasing this item please try again."
  delegate : self cancelButtonTitle:@"OK"otherButtonTitles:nil];
[failureAlert show];
[failureAlert release];
}

if(transaction.error.code == SKErrorPaymentInvalid) {
NSLog(@"Payment invalid (%d), product: %@", (int)transaction.error.code, transaction.payment.productIdentifier);
UIAlertView *failureAlert = [[UIAlertView alloc] initWithTitle :@"In-App-Purchase Error:"
message: @"There was an error purchasing this item please try again."
  delegate : self cancelButtonTitle:@"OK"otherButtonTitles:nil];
[failureAlert show];
[failureAlert release];
}

if(transaction.error.code == SKErrorPaymentNotAllowed) {
NSLog(@"Payment not allowed (%d), product: %@", (int)transaction.error.code, transaction.payment.productIdentifier);
UIAlertView *failureAlert = [[UIAlertView alloc] initWithTitle :@"In-App-Purchase Error:"
message: @"There was an error purchasing this item please try again."
  delegate : self cancelButtonTitle:@"OK"otherButtonTitles:nil];
[failureAlert show];
[failureAlert release];
}
    }
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}


@end

7
2018-05-03 16:41


asal


Jawaban:


Ini mungkin konyol, tetapi - jika Anda yakin kode Anda benar - lakukan hard reset (penghapusan penuh) iPod Anda (Pengaturan => Umum => Reset => Hapus Semua Konten dan Pengaturan).


3
2018-05-04 09:36



Ini juga terjadi jika Anda masuk dengan beberapa Akun iTunes lainnya. Untuk menguji pembelian Dalam Aplikasi di kotak Kotak Pasir, Anda harus keluar dari akun mana pun dari Setelan. Kemudian luncurkan aplikasi Anda dan Lakukan Pembelian dalam Aplikasi. Ketika akun Anda diminta, masukkan akun yang Anda buat sebagai Akun Uji iTunes. Dengan cara ini lingkungan Sandbox Anda akan bekerja dengan sempurna. Semoga ini bisa membantu.


1
2018-03-16 19:59



Mungkin server Sandbox sedang down.

Saya bisa mendapatkan info produk tetapi saya mendapatkan kesalahan yang sama saat meminta pembelian

Saya telah memeriksa Forum Pengembang Apple dan lebih banyak orang mengalami masalah yang sama. https://devforums.apple.com/index.jspa

Saya berharap ini dapat menyelamatkan seseorang beberapa waktu suatu hari, karena saya telah menghabiskan 4 jam di sekitar ini.


0
2018-04-10 16:29