簡體   English   中英

iphone:應用內購買錯誤

[英]iphone: in-App Purchase Error

我正在開發一個應用程序並在其中使用應用程序內購買。 我在iTunes Connect中創建了應用內商品。 直到昨天一切正常。 但今天。 它開始給出這個錯誤。

“錯誤:付款請求僅限於通過Store Kit的didRecieveResponse方法返回的有效產品。”

我不知道是什么問題。 請回復

好吧,這可能是吸煙槍 -

根據Store Kit應用程序的官方數據流,您應該在嘗試購買之前檢索有關可用購買的信息(SKProductsRequest)(SKPaymentQueue)。

我添加了代碼來做到這一點,即使沒有使用本地化數據。 我打了電話,驗證了該項目的存在,並且剛剛向NSLOG傾倒了它。

購買通過,沒有錯誤!

然后,我刪除了名為SKProductsRequest的代碼,並重新運行它,並得到“付款請求受限制...”錯誤消息。

看起來商店套件框架的變化似乎是要求您調用SKProductsRequest,以便在將tehy添加到SKPaymentQueue時使購買行為正確。

在計算機科學中,他們似乎已經引入了兩個邏輯相關但又獨立的模塊之間的硬依賴關系。 這是一個非常糟糕的做法。

嘗試將此代碼添加到您的應用程序中,並在對SKPaymentQueue進行“真實”調用之前的某個時刻調用dumpProductInfo,並查看它是否開始工作 - 確保使用您的實際產品標識符更新嵌入的字符串文字。

-(void) dumpProductInfo
{
        SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:@"com.company.domain.app.purchase"]];
        request.delegate = self;
        [request start];
}

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
    NSArray *myProduct = response.products;
    // populate UI
    NSLog(@"Products:");
    for (int i = 0; i < [myProduct count]; i++)
    {
        SKProduct *product = [myProduct objectAtIndex:i];
        NSLog(@"Name: %@ - Price: %f   ID: %@" ,
              [product localizedTitle],
              [[product price] doubleValue], 
              [product productIdentifier]);

    }
}

跟進:如下所述,Apple技術說明QA1691證實了我認為發生的事情是正確的 - 我們發現它后兩周:p

我突然開始得到這個! 我上次測試購買代碼的最后一次是在上周末,它工作正常!

我甚至使用以前的版本進行測試,以確保沒有代碼更改負責。 這個版本正在運行,並已提交給商店。

有些東西肯定會改變,它似乎來自應用程序商店的一面!

我會注意到商店的“官方”數據流要求應用程序檢索可供購買的產品列表,但是一旦在iTunes Connect中定義購買,我就會對標識符進行硬編碼。 我檢查了購買ID是否已經改變,答案是否已經改變。

為了讓這更令人困惑,我從iTunes中刪除了實時應用程序,購買過程很順利。 兩個方案之間的差異是1.一個是使用我的開發配置文件而不是部署配置文件2.一個是在沙箱中運行而不是“真實”3.一個使用測試帳戶進行購買

為了確保它不是一個糟糕的測試帳戶,我剛剛創建了一個新帳戶並嘗試使用它進行測試。 它沒有任何區別。

更新 - 我通過電子郵件向Apple發送了此消息,但尚未收到回復,但錯誤突然消失,一切都按預期開始工作了!?!

這是我的理論,關於我最近為新應用程序測試IAP所發生的事情:

  1. 在您批准並提交審核后,沙箱IAP環境不允許您再次測試IAP。 據我所知,這是一個新的無證件行為,這給我們的iPhone SDK猴子帶來了許多麻煩。 在此更改之前,即使在提交Apple審核之后以及應用程序獲得批准之前,您也可以進行測試IAP。

因此,在這種情況下,即使向IAP商店申請有效的產品ID也無濟於事。

  1. 看來,作為審核流程的一部分,Apple添加了以下自動化測試:使您的所有IAP無效並測試您的應用,以確保在使用IAP填充UI之前發送有效IAP ID請求。 因此,如果您沒有使用您的代碼解決此問題,您的應用程序將被拒絕,但他們會告訴您,請求有效ID只是建議的最佳做法而不是必需的,但根據我的經驗,現在需要它。

我希望這會節省一些時間 - 花費數小時的時間,並且不得不經歷幾次應用程序拒絕,直到我弄明白並開始工作。

你必須直接從xcode構建它才能使沙箱顯然正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM