2009-10-27 57 views
4

我正在嘗試在我的iPhone上進行應用程序購買測試,並遇到產品ID請求信息最終以「didRecieveResponse」中的無效產品ID返回給我的問題,方法。iPhone Store Kit返回無效的產品ID錯誤

我:

  • 創建與此應用程序相關的商店的產品。它是捆綁ID匹配其他所有內容。它已被清除出售並被開發人員批准。
  • 確保我的新配置文件已啓用應用程序商店購買,並且具有完整的應用程序名稱:「com.domain.appname」
  • 確保這是用於將應用程序簽名到我的iPhone的配置文件。
  • 確保「com.domain.appname」是用於構建配置文件的應用程序ID。
  • 確保在我的plist文件中使用「com.domain.appname」作爲包標識符。

一切似乎都已到位,但我仍然將我的產品退回給我作爲無效ID。

這是我使用的代碼:


- (void)requestProductData { 
    SKProductRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject: @"com.domain.appname.productid"]]; 
    request.delegate = self; 
    [request start]; 
} 

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response 
{ 
    NSArray *myProducts = response.products; 
    NSArray *myInvalidProducts = response.invalidProductIdentifiers; 

    for(int i = 1; i < myInvalidProducts.count; ++i) 
    { 
     std::cout <<"invalid product id = " << [[myInvalidProducts objectAtIndex:i] UTF8String] << std::endl; 
    } 

    for(int i = 0; i < myProducts.count; ++i) 
    { 
     SKProduct * myProduct = [myProducts objectAtIndex:i]; 
     std::cout << "Product Info:" << std::endl; 
     std::cout << "\tlocalizedTitle   = " << [[myProduct localizedTitle] UTF8String] << std::endl; 
     std::cout << "\tlocalizedDescription = " << [[myProduct localizedDescription] UTF8String] << std::endl; 
     std::cout << "\tproductIdentifier  = " << [[myProduct productIdentifier] UTF8String] << std::endl; 
     std::cout << "\tprice     = " << [[myProduct price] doubleValue] << std::endl; 
     std::cout << "\tpriceLocale   = " << [myProduct priceLocale] << std::endl; 
    } 

    [request autorelease]; 
} 

我所有的產品ID在無效打印出現了,他們沒有在顯示「產品信息:」打印輸出。

任何意見將不勝感激...

p.S.是的,這是構建爲Objective-c/C++。

+0

也許是一個愚蠢的問題,但是你真的去iTunes Connect並添加了你正在查詢的應用內購買產品嗎? –

+0

根本不是一個愚蠢的問題。我確實添加了應用內購買。我檢查了它的ID,這一切都匹配。它已被清除出售並由開發人員驗證。 – EToreo

+0

這可能不是它,但我注意到在你的示例代碼中你調用了「initWithProductIndentifiers」而不是「initWithProductIdentifiers」.... –

回答

0

OK,這樣做的一切後我可能想到的,讀每一個論壇在那裏,這裏是什麼工作:

重做EVERYHING。

  1. 從Xcode Organizer中刪除所有的供應配置文件。
  2. 關閉Xcode。
  3. 創建一個新的應用程序ID。
  4. 使用新的應用程序ID創建新的供應配置文件。
  5. 使用新的應用程序ID創建新的分配調配配置文件。
  6. 在iTunes Connect中創建一個新應用程序
  7. 啓動Xcode,安裝兩個新的供應配置文件。更新yoru包ID以匹配。另外請確保您的應用程序請求的ID字符串已更新以反映您的捆綁ID。
  8. 使用新的分銷部署配置文件以分佈模式構建您的項目。
  9. 上傳您的新二進制文件。 (請不要拒絕)
  10. 設置您的測試應用內購買。
  11. 使用新的供應配置文件在調試模式下構建您的項目。
  12. 測試請求。

這就是讓我的店鋪工作所需要的。我最好的猜測是蘋果後端服務器有時會被搞砸,你只需要從頭開始。

希望這可以幫助大家!

+1

是否可以使用與以前相同的名稱創建新應用程序? – psychotik

6

我嘗試了蘋果論壇和這裏的所有建議,但仍然無法實現。找到解決方案 - 您的應用程序需要通過Xcode傳輸才能啓用沙箱。

很明顯,對嗎?好吧,如果您正在更新現有帳戶,該設備仍然會將其視爲App Store安裝的應用程序。

刪除它,然後再轉移它。它應該現在工作:)

+1

我也收到無效的產品標識符,請問您通過Xcode轉移應用程序是什麼意思?我該如何做到這一點?提前致謝。 – bobo

+1

是的,我也很好奇。 –

+1

@bobo他意味着在Xcode中而不是模擬器上運行設備上的應用程序。 @Hector - 謝謝,你救了我所有的挫折! – jakev

1

我一直有一個類似的問題,一個新的應用程序(v1.0還沒有在商店中發佈),我試圖添加到應用程序購買了。我設置了所有東西,添加了產品等等,而且當我做SKProductsRequest時,我的產品總是返回無效狀態。

當我在Apple開發人員論壇上看到切線相關的帖子時,我正要放棄整個過程。它建議從測試設備中刪除應用程序,並進行新的build + install。那就是訣竅。

可以肯定的是,我在另一臺設備上嘗試過,它給了我同樣的麻煩,並且它也修復了它。

這只是一個猜測,但我認爲如果設備上有一個使用在添加IAP之前創建的設置配置文件構建的設備,則需要刪除該設備並使用IAP配置文件。 (也就是說,只需更換到位不會做的伎倆的應用程序。)

1

如果沒有錯在你的代碼,有時 它返回無效的productId 只是因爲,你可能需要的時間超過10小時,您的改變信息。生效。 或者,產品ID無效,因爲您的設備上仍然存在錯誤,所以您可以再次嘗試刪除應用並重新構建。我的經驗 , 希望它會有所幫助。

4

刪除測試iPhone上的應用程序,並重新安裝它的工作。此外,我還提交了應用內購買商品後等了8個小時。

+0

當我遇到問題時,也爲我工作。 – monkeydom

+0

再次遇到了這個問題 - 似乎幾乎每次我將IAP實現到另一個應用程序中時都會出現。刪除應用程序,做一個乾淨的+從XCode重新安裝修復它。我相信這也解決了之前的問題。 – Jonny

3

請通過下面的步驟去:

  1. 登錄到iTunes使用您的開發者帳戶(https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/wo/)連接。

  2. 去標籤 - 「合約,稅務,銀行等」

  3. 檢查請求合同和過程的部分合同。

  4. 查看「iOS支付應用程序」並且有聯繫信息,銀行信息和稅務信息需要設置。

  5. 當「iOS付費應用程序」單元格將移至「合同有效」部分時,我將能夠使用產品進行應用程序內購買。

請通過下面的鏈接瞭解更多信息: http://developer.apple.com/library/ios/#technotes/tn2259/_index.html

2

請注意,當iPhone越獄的的AppSync包打破應用程序內,購買完全測試。 AppSync與Install0us一起安裝爲依賴項。

您不必完全恢復iOS,只需卸載Cydia中的AppSync即可成功測試應用內購買

所有關於fixind「無效產品」的論壇,教程和評論的所有提示在我移除AppSync之前都不適用於我。

0

針對IAP的iTunes Connect界面最近已更新,可能會導致無效:<產品ID>錯誤。

您現在可以在iTunes連接中添加一個IAP,而不需要將默認的價格設置爲USD 0,並且可以讓您保存該條目。

如果您未事先編輯價格字段,則按下保存時,舊版UI會發生抱怨。

很容易錯過這個領域完全和任何嘗試通過任何iOS通話使用該產品ID獲取信息將導致無效:<產品ID>而不是告訴你它發現<產品ID>售價爲美元0.