如何从苹果商店直接购买应用内商品 - iOS Storekit

问题描述:

问题:我们的问题是,当应用程序通过从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 

的时候正是我们将看到新的应用程序内弹出?

谢谢你的回复。

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之间的任何延迟,您的广告不会在这段时间显示。你可以尝试看看练习是否有延迟。