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

时间:2017-07-24 11:53:59

标签: ios in-app-purchase storekit in-app ios11

问题:我们的问题是,当应用程序通过从Apple Store购买的应用程序内购买时,应避免显示插页式广告。

我正在尝试管理iOS11的新功能,使我们能够通过新的Storekit功能直接从Apple Store购买应用程序:

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-我想知道我们是否可以在此方法被调用之前检测到应用程序是通过以下功能之一从Apple Store购买的事实

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

什么时候我们会看到新的应用内弹出窗口?

感谢您的回复。

2 个答案:

答案 0 :(得分:4)

paymentQueue:shouldAddStorePayment:forProduct:之前,您不会在App Store中收到有关inApp的通知。此外,除非您的应用在paymentQueue:updatedTransactions:中显示一个,否则不会发生inApp弹出窗口。

这是我能为你建议的最好的事情:

我假设您在应用启动后不会立即制作插页式广告 - 这不会是非常好的用户体验。因此,您必须在知道用户购买内容的时间与处理该交易的时间之间不要显示广告。

  1. 那么,您可以拥有一个全局变量BOOL doAllowIntAd,默认为YES
  2. 要查看用户是否在application:(UIApplication *)application didFinishLaunchingWithOptions:的早期在App Store中购买了inApp,请致电[[SKPaymentQueue defaultQueue] addTransactionObserver:yourTransactionObserver];,以便您的观察者设置为从App接收inApp商店。这是我在didFinishLaunchingWithOptions:中做的第一件事。

  3. paymentQueue:shouldAddStorePayment:forProduct:yourTransactionObserver被调用后,在返回YES之前,请设置doAllowIntAd = NO以防止广告显示。

  4. 当StoreKit使用来自App Store的inApp在paymentQueue:updatedTransactions:上调用yourTransactionObserver时,您处理它的方式与处理在您的应用中进行购买的方式相同。例如,对于transaction.transactionState==SKPaymentTransactionStatePurchased,只需在处理完交易,启用内容并调用doAllowIntAd = YES后添加[yourSKPaymentQueue finishTransaction:],即可再次显示插页式广告。当然,您不仅要为doAllowIntAd重新启用SKPaymentTransactionStatePurchased,还要为其他transactionState重新启用earth.panTo([0,0], {animate: true, duration: 2.0}); 。但是,例如,您可以决定在延迟交易的情况下禁用广告。

  5. 因此,如果3&amp; 3之间有任何延迟4,您的广告在此期间不会显示。您可以尝试看看练习中是否有任何延迟。

答案 1 :(得分:0)

您已经知道,应该在展示广告之前检查购买状态。

最好在文档目录中的某处json:Array='true'购买状态。 (NSUserDefaults提供了此功能,可将信息保存为键值对。)

这是示例代码,对尝试此操作的任何人都可能有用。

您可以对其进行调整以在成功购买后调用它。

save

,在确定展示广告之前,您可以检查状态。

NSUserDefaults * defaults;
[defaults setObject:@"Purchased" forKey:@"InAppStatus"];

Apple仅提供一种从您的应用程序调用InApp购买的方法。但是您有责任避免陷入各种无休止的循环中。