Share via


在 Xamarin.iOS 中購買非消費性產品

非消費性產品由客戶「擁有」。 預期他們一律可以存取它們,即使他們的裝置遺失/遭竊,或者他們購買新的裝置。 它們適用於書籍、雜誌問題、遊戲等級、相片篩選、“支援功能”等。一旦使用者購買非消費性產品,他們就不必再支付它的費用。 如果您的程式代碼不小心讓他們嘗試,StoreKit 會顯示已購買的訊息。

非消費性產品範例

此範例包含名為 NonConsumables 的專案。 程式代碼範例示範如何使用相片篩選器作為範例來實作非消費性產品。 購買篩選條件后,就可以一次又一次地將它套用至相片。 您永遠不需要重新購買。

此系列螢幕快照中會顯示購買程式 – [購買 ] 按鈕會變成功能啟用按鈕:

購買程式會顯示在此系列螢幕快照中

購買程式與消費性產品相同:主要差異在於如何追蹤應用程式程式代碼中的購買。 在此範例中,只有在產品尚未購買時,才能使用 [購買] 按鈕,否則按鈕會啟動功能本身。

下圖顯示類別與 App Store 伺服器之間的互動,以執行非消費性產品購買:

類別與 App Store 伺服器之間的互動,以執行非消費性產品購買

消費性範例的主要差異在於,一旦購買完成,使用者介面就會更新,以防止重新購買。 在此範例中,成功交易的通知會更新使用者介面, 讓購買 按鈕轉換成啟動功能本身的按鈕。

重新購買非消費性產品

一旦成功購買產品,您的程式代碼通常應該隱藏或重新使用購買按鈕,以防止用戶嘗試再次購買產品。 範例應用程式會藉由將 [購買] 按鈕變更為讓範例相片篩選正常運作的按鈕來執行此動作。

在某些情況下,應用程式無法判斷是否已購買非消費性產品:

  • 如果在裝置上刪除並重新安裝應用程式,所有購買記錄都會消失(除非/直到使用者執行備份還原為止)。
  • 如果使用者已將應用程式安裝在兩部(或多個)裝置上,並在其中一部裝置上進行購買。 其他裝置將繼續顯示可供購買的產品。
  • 如果客戶在這些情況下嘗試重新購買非消費性產品,App Store 將不收費地再次履行產品。 使用者介面一開始會顯示為執行購買(例如,顯示確認警示,並需要Apple ID),不過使用者接著會看到一則訊息,告知他們產品已經購買。

此案例中的程式代碼路徑與一般購買完全相同,唯一的差異如下:

  • 使用者不會再次向您收取產品費用。
  • SKPaymentTransaction傳遞至應用程式的物件會有屬性OriginalTransaction,該屬性會參考最初購買產品時所產生的交易。
  • 銷售非消費性產品的應用程式也必須實作 StoreKit 的 還原 功能,以協助使用者擷取現有的購買。