轉一篇cocoachina的文章存檔,以備不時之需,未經實踐,僅供參考。
參考:在試用了各種可能的解決方桉後,你只能身心疲憊,彷徨無助。
廢話少說,我們直入主題吧。
概況iap能正常工作的秘訣:分成兩個步驟:
建立及提取產品描述
購買產品
第乙個步驟是你可能遇到問題的部分。一旦你在**中成功地獲取了產品描述,編寫購買產品的**不過是小菜一碟。
我們先看看步驟1。
建立及提取產品描述
下面是有關建立產品及提取其描述的非常粗略的步驟:
注意: 為提取產品描述,你並不需要在itunes connect中建立iap測試使用者。
7dw89rzkly.com.runmonster.runmonsterfree
7dw89rzkly.com.runmonster.*
下面就是令人痛苦的生成和安裝新provisioning profile的詳細步驟:
在你將產品新增到 itunes connect之前,你必須新增此產品所需的程式。如果你的程式還沒有100%完成也無需擔心,你可以先提交具有部分資料的程式,最後再提交真實的程式。
注意: 只有 sku 和 version(版本)部分是以後不可修改的
6. 新增產品
完成了以上所有步驟後,我們最終可以向itunes connect中新增產品了。
注意: storekit 無法在模擬器上工作。你必須在真機上進行測試。
// we will release the request object in the delegate callback
}#pragma mark -
#pragma mark skproductsrequestdelegate methods
- (void)productsrequest:(skproductsrequest *)request didreceiveresponse:(skproductsresponse *)response
for (nsstring *invalidproductid in response.invalidproductidentifiers)
// finally release the reqest we alloc/init』ed in requestproupgradeproductdata
[productsrequest release];
上面**有幾點需要注意:
指定產品id時,你必須使用完整產品id。例如,上例中使用 「com.runmonster.runmonsterfree.upgradetopro」。僅使用 「upgradetopro」 將不會正常工作。
如果在productsrequest:didreceiveresponse:中response.products 為 nil,而你的產品id出現於 response.invalidproductidentifers 陣列中時,那麼請做好心理準備開始一場徒勞的搜尋戰吧。 storekit api沒有提供任何幫助,也沒有任何指示關於為什麼你的id是無效的。很可愛,不是嗎?
skproduct類提供了有關程式標題和描述的本地化版本,但是**則沒有本地化版本。下面是針對此疏忽提供的**:
複製**
// skproduct+localizedprice.h
#import
#import
@inte***ce skproduct (localizedprice)
@property (nonatomic, readonly) nsstring *localizedprice;
@end
複製**
// skproduct+localizedprice.m
#import 「skproduct+localizedprice.h」
@implementation skproduct (localizedprice)
- (nsstring *)localizedprice
@end
8. 等待幾小時
遵循了上述所有步驟,但是你的產品仍然是無效的?你是否兩次,三次,四次不懈努力地確認你是否遵循了上面提到的每個步驟?你是否已經對網上iap資訊少得可憐而感到絕望?
那麼,你應該等待。
購買產品
至此你應該已經成功地獲取了 skproduct 描述。比較而言,支援購買產品相對簡單些。僅需下面三個步驟:
編寫**支援事務(transaction)
在itunes connect中新增程式測試使用者
在裝置中登入你的 itunes store 帳號
購買測試
我們從編寫支援事務所需**開始。
下面所有**都是有關事務處理的後台部分。這是乙個單獨的類只有一條簡單的api以供外部類(比如view controller)呼叫進行購買。如果你找到將其整合到你程式的購買部分的方法,那麼我推薦你使用類似方桉。
要測試上面的新**,你還需要編寫呼叫 loadstore, canmakepurchases 以及 purchaseproupgrade 方法的**。
上述**有幾個部分是針對我的程式的。例如,在 providecontent:中,nsuserdefaults 中的@」isproupgradepurchased」 bool 欄位被設定為 yes。程式的其他部分將檢查此bool值以確定是否需要啟動專業版功能。如果你正好也要實現免費公升級專業版的功能,那麼你可以使用同樣的方法。
按以下步驟建立測試使用者:
3. 在你的裝置中退出登入
在進行程式購買功能測試前,你必須在你的裝置中退出itunes store。遵循以下步驟:
總結實現iap功能比想象的要複雜許多。我可是經過無數痛苦的經歷才完成我的程式。希望能夠幫助其他開發者減輕他們的痛苦。應用程式內購買
IAP 應用程式設計
1 檢查是否需要對第二部分 進行更新 2 如果不需要更新則轉到4 3 執行更新操作 4 跳轉到第二部分 執行 第一部分 必須通過其它手段,如jtag或isp燒入 第二部分 可以使用第一部分 iap功能燒入,也可以和第一部分 一道燒入,以後需要程式更新是再通過第一部分iap 更新。對於stm32來說,...
Android應用程式完全退出
使用單例模式建立乙個 activity 管理物件,該物件中有乙個 activity 容器 具體實現自己處理,使用 linkedlist 等 專門負責儲存新開啟的每乙個 activity 並且容易理解 易於操作,非常不錯!類 儲存每乙個 activity 並實現關閉所有 activity 的操作 1 ...
應用內購買 IAP 各型別在服務端的驗證規則
一 非消耗品 比如單本雜誌購買,蘋果伺服器支援恢復 1.先驗證伺服器有沒有購買記錄,如果有,則不處理,此次操作成功 2.如果伺服器沒有購買記錄,則到蘋果伺服器驗證 1 首先到正式驗證位址驗證收據,如果返回狀態非0,則再向測試驗證位址驗證收據。2 如果最後返回的狀態為0,表示是有效購買,則插入,增加許...