2012-01-18 100 views
4

我們正在開發一個應用程序(當然)在應用程序購買(IAP)中使用。 我已經做了所有的指導,使iap和一切工作正常,直到我想購買。
某些代碼:在應用程序購買沙箱不會提示我的登錄/通

MainViewController.m

-(void)viewDidLoad { 
      if ([SKPaymentQueue canMakePayments]) { 
        MyStoreObserver *observer = [[MyStoreObserver alloc] init];  
        [[SKPaymentQueue defaultQueue] addTransactionObserver:observer];   

        SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObjects: @"com.company.app.product1", @"com.company.app.product1", nil]]; 
        request.delegate = self; 
        [request start]; 
      } 
    }; 

    -(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { 
      for (SKProduct *prod in response.products) { 
        NSLog(@"%@ (%@)", prod.localizedTitle, prod.price); 
      } 
      [request release]; 
    }; 

    -(IBAction)clickBuy:(UIButton *)__sender { 
      SKPayment *payment = [SKPayment paymentWithProductIdentifier:@"com.company.app.product1"]; 
      [[SKPaymentQueue defaultQueue] addPayment:payment]; 
    }; 

MyStoreObserver.m

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { 
     for (SKPaymentTransaction *transaction in transactions) { 
      switch (transaction.transactionState) { 
       case SKPaymentTransactionStatePurchased: 
        NSLog(@"SKPaymentTransactionStatePurchased"); 
        break; 
       case SKPaymentTransactionStateFailed:    
        NSLog(@"SKPaymentTransactionStateFailed"); 
        break; 
       case SKPaymentTransactionStateRestored: 
        NSLog(@"SKPaymentTransactionStateRestored"); 
        break; 
       case SKPaymentTransactionStatePurchasing: 
        NSLog(@"SKPaymentTransactionStatePurchasing"); 
       default: 
        break; 
      } 
     } 
    }; 

productRequest:委託方法示出了2個產品及其名稱/價格。就像我在iTunes連接網站上輸入的一樣。

但是,一旦我點擊'購買'按鈕,就不會彈出對話框或要求我輸入憑據。只記錄「SKPaymentTransactionStatePurchasing」。

我:
- ...在設置/存儲窗格
註銷 - ...現在用的是正確的配置型材
- ...拼死

有人嗎?

+0

同樣發生在我身上...... – negersiu 2012-01-18 13:36:58

+0

昨天我的應用程序內購買工作正常(代碼與您的代碼類似)。我買了現在買的彈出框顯得很好,但今天早上測試我得到和你一樣的東西。它承認我的產品(我可以得到名稱說明,價格,產品ID等),但是當我設置付款並在我的「purchaseUpgrade」功能中添加付款時,沒有任何反應。我想知道現在是否有沙盒問題......是否有其他人現在能夠正確測試他們的應用內購買? – 2012-01-18 18:19:47

+0

我希望是這樣,閱讀官方指南4次,並按照它通過...但仍然沒有對話。 – basvk 2012-01-18 22:03:40

回答

4

之後,我的頭髮也因爲類似的問題而沮喪(而不是被要求輸入我的憑據,它會自動填寫電子郵件地址,即使在設置應用程序中退出商店時也不會更改它) 。我發現在同一設備上的開發版本中,我有一個失敗的事務卡在隊列中,我不得不清除設備隊列中的所有事務,然後再次嘗試。

NSArray *transactions = [[SKPaymentQueue defaultQueue] transactions]; 
for(id transaction in transactions){ 
    [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
} 

我迷上這個代碼高達一個IBOutlet和正在運行一次我在應用程序內購買後工作。

+2

在我第一次點擊時,我的付款隊列是空的,第二次點擊拋出一個'NSInvalidArgumentException:無法完成採購交易'。這是有道理的,因爲在第一次點擊時,我向隊列中添加了一個項目,但沒有對話框顯示... – basvk 2012-01-18 14:38:23

+0

我在開發版本中遇到同樣的問題。我試着用上面的代碼清除失敗的事務,但SKPaymentQueue沒有。但是我仍然會收到一個對話框,詢問以前測試用戶帳戶的憑據(即使我已經在設置中註銷了帳戶)。有什麼建議麼? – 2014-06-11 07:36:54

2

iPhone可能被禁止訪問Apple App Store。例如,父母可以限制孩子購買額外內容的能力。

將交易之前,請確保你u能買還是不檢查它像這樣 - ?

-(IBAction)clickBuy:(UIButton *)__sender { 

     if ([SKPaymentQueue canMakePayments]) { 
     SKPayment *payment = [SKPayment paymentWithProductIdentifier:@"Product_id"]; 
     [[SKPaymentQueue defaultQueue] addPayment:payment]; 
     } 
     else { 
     //show appropriate message 
     } 
    } 
+1

我在檢索產品時檢查'[SKPaymentQueue canMakePayments]',並且(如我所說)向我顯示了我輸入的2個產品,所以我可以在此設備上進行付款。 – basvk 2012-01-18 14:35:35

0

你用iPhone/iPad模擬器4.2什麼測試?這可能是問題所在。在iPhone/iPad Simulator 5.0或設備上進行測試將正確運行storekit。

+0

不,在我的iOS5 iPad1上 – basvk 2012-01-18 22:00:15

+0

我花了數小時工作。我最終將它與沙箱用戶合作,但首先我必須刪除我正在使用的沙箱用戶,創建一個新的雅虎郵箱帳戶,使用Apple ID註冊該用戶,在我的電子郵件中驗證Apple ID,然後返回到我的iPhone,用Apple ID登錄到iTunes商店,然後通過它購買。最後,它的工作,我將我的應用程序提交到應用程序商店。 – Jackson 2014-10-11 04:47:48

12

我遇到了一個類似的問題,但我的更多的是對我而言頭腦發熱。我已經「重構」調用finishTransaction,以便它正在呼籲每一個國家在transactionState

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { 
    for (SKPaymentTransaction *transaction in transactions) { 
     switch (transaction.transactionState) { 
      case SKPaymentTransactionStatePurchased: 
       // do stuff 
       break; 
      case SKPaymentTransactionStateFailed: 
       // do stuff 
       break; 
      case SKPaymentTransactionStateRestored: 
       // do stuff 
       break; 
      default: 
       break; 
     } 
     [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
    } 
} 

原來™,這也將調用finishTransactionSKPaymentTransactionStatePurchasing,這將導致崩潰。移動finishTransaction回到switch語句的每一種情況都固定了。

2

我也一直拉着我的頭髮這一點。結果測試設備的一個簡單的重新啓動得到了一切工作正常。

+0

這比拇指更值得:-) – 2015-11-13 09:33:33

相關問題