2017-07-24 90 views
4

問題:我們的問題是,當應用程序通過從Apple Store購買的應用程序內購買而被喚醒時,應避免顯示插頁式廣告。如何從蘋果商店直接購買應用內商品 - iOS Storekit

我試圖從iOS11管理新功能,能夠我們能夠在應用程序內直接從蘋果商店購買線槽新Storekit功能:

https://developer.apple.com/documentation/storekit/skpaymenttransactionobserver/2877502-paymentqueue?changes=latest_minor&language=objc

- (BOOL)paymentQueue:(SKPaymentQueue *)queue shouldAddStorePayment:(SKPayment *)payment forProduct:(SKProduct *)product 

我有兩個問題:

1-我想知道如果我們能夠檢測此方法之前稱爲應用程序是從蘋果商店購買的事實在下面的功能之一通過

launchOptions參數? :

- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)launchOptions 

2 - 當我們返回YES或NO(並添加我們自己支付到隊列)的

- (BOOL)paymentQueue:(SKPaymentQueue *)queue shouldAddStorePayment:(SKPayment *)payment forProduct:(SKProduct *)product 

的時候正是我們將看到新的應用程序內彈出?

謝謝你的回覆。

回答

1

paymentQueue:shouldAddStorePayment:forProduct:之前,您沒有在App Store中收到通知。此外,除非您的應用程序在paymentQueue:updatedTransactions:中提供了一個,否則不會出現inApp彈出窗口。

這是我能爲您推薦最好的東西:

我假設你不立即提出了一個插頁式廣告在你的應用程序啓動 - 這不會是一個很好的用戶體驗。因此,您只需在知道用戶購買內容的時間與處理該交易的時間之間不要顯示廣告。

  1. 那麼,你可以有一個全局變量BOOL doAllowIntAd,默認爲YES
  2. 要了解用戶是否在App Store中購買了inApp,在application:(UIApplication *)application didFinishLaunchingWithOptions:的很早時段,請致電[[SKPaymentQueue defaultQueue] addTransactionObserver:yourTransactionObserver];,以便您的觀察者被設置爲從App Store接收inApp。這是我在didFinishLaunchingWithOptions:做的第一件事。

  3. yourTransactionObserverpaymentQueue:shouldAddStorePayment:forProduct:被調用,返回YES之前,設置doAllowIntAd = NO保持的廣告顯示。

  4. 當StoreKit通過App Store上的inApp調用paymentQueue:updatedTransactions:yourTransactionObserver時,您將按照處理在您的應用中進行的購買的相同方式來處理它。例如,對於transaction.transactionState==SKPaymentTransactionStatePurchased,只需在處理事務處理,啓用內容和調用[yourSKPaymentQueue finishTransaction:]後添加doAllowIntAd = YES,以允許再次顯示插頁式廣告。當然,您應該重新啓用doAllowIntAd,不僅僅是爲SKPaymentTransactionStatePurchased,而且還有一些其他的transactionState。但是,例如,在交易延期的情況下,您可能會決定禁用廣告。

因此,如果有3 & 4之間的任何延遲,您的廣告不會在這段時間顯示。你可以嘗試看看練習是否有延遲。

相關問題