2012-03-13 21 views
21

我已經有應用內購買工作正常,我要去服務器驗證路線。服務器需要知道我是否在沙箱中,所以現在我只是發送一個「& sandbox = 1」參數。當然,當完整版本的應用程序出來時,我不會發送這個參數。(iOS + StoreKit)我可以檢測到我在沙箱中的時間嗎?

我寧願沒有這個硬編碼在我的應用程序,因爲這將在未來的測試困難的,這是一個多(大)一點要記住的改變提交建立蘋果之前。

有沒有一種方法我可以問StoreKit如果我在沙箱中,所以我可以再確定我是否需要將此參數發送到我的服務器?或者,有沒有其他的最佳做法來處理服務器驗證?

思考這個多了,我應該只是在服務器總是首先檢查活動的系統,然後在沙箱?如果Apple ID在活動和沙箱系統之間隔離,那麼它會不會有任何傷害呢?

謝謝。

+0

在[使用應用程序內購買管理訂閱](https://developer.apple.com/videos/wwdc/2012/?id=308)中對此進行了討論。時間:24:13 – DanSkeel 2012-09-12 09:14:40

回答

62

後有點挖我發現這個從蘋果公司的Technical Note TN2259

如何驗證我的收據(IOS)?

始終以生產URL首先確認您的收據;如果您收到21007狀態碼,請繼續使用沙箱網址進行驗證。遵循此方法可確保您的應用程序在沙箱中進行測試或評估或在App Store中生效時不必在URL之間切換。

所以它看起來像我應該完全斧頭&sandbox參數,只是做到這一點。我真的不得不挖掘這個答案,所以我在這裏發佈它,希望別人跑過去!

+0

另外它看起來像:不要依賴那個代碼特別是:http://stackoverflow.com/questions/9677193/ios-storekit-can-i-detect-when-im-in-the -sandbox – Fattie 2013-05-17 05:16:04

+4

爲將來訪問者節省一點時間的評論:確實,某些文檔顯示了一個狀態代碼表,這些代碼應該僅用於訂閱驗證,但Apple特別推薦此代碼用於此行爲在這個答案的鏈接中可以看到。所以21007應該是安全可靠的。 – roguenet 2013-10-29 02:12:21

+0

該說明已移至此處:https://developer.apple.com/library/ios/technotes/tn2413/_index.html#//apple_ref/doc/uid/DTS40016228-CH1-RECEIPTURL – 2016-04-03 09:31:23

8

我遇到了同樣的問題,我的應用程序被拒絕,因爲我提交的應用程序的「生產」版本被硬編碼連接到我的服務器上驗證與真實AppStore服務器的收據的PHP腳本(而我的開發build指向另一個驗證沙箱服務器收據的PHP腳本)。但是,在與蘋果工程師進行了幾次交流之後,我發現他們使用沙箱用戶帳戶來測試提交的應用程序,這就解釋了他們爲什麼會遇到錯誤。

而不是有條件地構建我的應用程序來指向一個腳本或另一個腳本,我將使用一個腳本,首先嚐試生產服務器,然後如果它收到21007狀態代碼,則退回到沙箱服務器,如上所述!

非常感謝!

6

始終以生產URL首先確認您的收據;如果您收到21007狀態碼,請繼續使用沙箱網址進行驗證。

不幸的是,技術說明沒有提及這隻適用於自動續訂訂閱!

由於In-App Purchase Programming Guide提到如下表7-1:

重要非零狀態這裏代碼只適用於當恢復有關自動再生訂閱信息。測試其他類型產品的響應時不要使用這些狀態碼。

對於非續訂訂閱,生產服務器不會返回狀態碼,而是返回正確的收據。

如果您被迫使用非續訂並實現您自己的訂閱到期邏輯,可能的解決方案是將您的應用程序版本發送到您的服務器,並跟蹤當前正在開發哪些版本,如例如,您可以重定向到sandbox.itunes服務器以在適當的情況下驗證收據,並且模仿訂閱的x分鐘到期時間(如sandbox.itunes用於自動更新)以便在您的服務器上進行開發。

+0

這是一個絕對的關鍵點,gr,感謝那面旗幟。請注意,21008和21006也可能是相關的。 http://stackoverflow.com/questions/9677193/ios-storekit-can-i-detect-when-im-in-the-sandbox毫無疑問,最好的解決方案就是尋找任何錯誤,即缺乏「成功條件」。 – Fattie 2013-05-17 05:13:32

+0

「在服務器上驗證收據時,您的服務器需要能夠處理生產簽名應用程序從Apple測試環境獲取收據。推薦的方法是讓生產服務器始終首先驗證生產App Store的收據。驗證失敗,並顯示錯誤代碼「生產中使用的沙箱收據」,相對於測試環境進行驗證。「 (https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StoreKitGuide/StoreKitGuide.pdf) – 2014-02-19 18:23:19

相關問題