IAP( 應用程式內購買) 完全攻略

2021-09-30 09:17:46 字數 2802 閱讀 6502

轉一篇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,表示是有效購買,則插入,增加許...