Избегайте межстраничных объявлений, чтобы показать, куплено ли приложение через приложение App Store.

Начиная с iOS 11, Apple представила функцию покупки в приложении через приложение App Store.

Проблема. Наша проблема состоит в том, чтобы избежать показа межстраничной рекламы, когда приложение просыпается, путем покупки в приложении, купленного в App Store App.

Я пытаюсь управлять этим с помощью новой функции 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- Я хотел бы знать, сможем ли мы обнаружить до того, как этот метод будет называться, тот факт, что приложение покупается в 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 - Когда мы возвращаем ДА или НЕТ (и сами добавляем платеж в очередь) в

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

когда именно мы увидим новое всплывающее окно в приложении?

Спасибо за любой ответ.


person htan    schedule 24.07.2017    source источник


Ответы (2)


Вы не получаете уведомления о приложении inApp в App Store до paymentQueue:shouldAddStorePayment:forProduct:. Кроме того, всплывающее окно inApp не появляется, если ваше приложение не представляет его в paymentQueue:updatedTransactions:.

Это лучшее, что я могу вам предложить:

Я предполагаю, что вы не размещаете межстраничную рекламу сразу после запуска приложения - это будет не очень хорошо для пользователей. Таким образом, вам просто нужно запретить показ рекламы между моментом, когда вы знаете, что пользователь что-то купил, и временем, когда вы обрабатываете эту транзакцию.

  1. Итак, у вас может быть глобальная переменная BOOL doAllowIntAd, которая по умолчанию равна YES.
  2. Чтобы узнать, купил ли пользователь inApp в App Store, очень рано в application:(UIApplication *)application didFinishLaunchingWithOptions:, вы вызываете [[SKPaymentQueue defaultQueue] addTransactionObserver:yourTransactionObserver];, чтобы ваш наблюдатель был настроен на получение inApp из App Store. Это первое, что я делаю в didFinishLaunchingWithOptions:.

  3. Когда вызывается paymentQueue:shouldAddStorePayment:forProduct: on yourTransactionObserver, перед возвратом YES установите doAllowIntAd = NO, чтобы объявление не отображалось.

  4. Когда StoreKit вызывает paymentQueue:updatedTransactions: на yourTransactionObserver с inApp из App Store, вы обрабатываете его так же, как и покупку, сделанную в вашем приложении. Например, для transaction.transactionState==SKPaymentTransactionStatePurchased просто добавьте doAllowIntAd = YES после обработки транзакции, включения содержимого и вызова [yourSKPaymentQueue finishTransaction:], чтобы межстраничная реклама отображалась снова. Конечно, вам следует снова включить doAllowIntAd не только для SKPaymentTransactionStatePurchased, но и для некоторых других transactionState. Но вы можете решить оставить рекламу отключенной, например, в случае, если транзакция откладывается.

Таким образом, если есть задержка между 3 и 4, ваше объявление не будет отображаться в течение этого времени. Вы можете поэкспериментировать, чтобы увидеть, есть ли задержка на практике.

person KeithL    schedule 13.10.2017

Как вы уже знаете, вы должны проверить статус покупки перед показом рекламы.

Рекомендуется save зафиксировать статус купленного где-нибудь в каталоге документов. (NSUserDefaults предоставляет эту возможность для сохранения информации в парах ключ-значение).

Вот пример кода, он может пригодиться всем, кто пытается это сделать.

Вы можете настроить его для вызова при успешной покупке.

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

и прежде чем принять решение о показе рекламы, вы можете проверить статус.

if([[defaults valueForKey:@"InAppStatus"] isEqualToString:@"Purchased"]) {

   //App Should Unlock with No Ads

} else {

    //Show Ads
}

Apple просто предоставляет способ вызвать покупку InApp из вашего приложения. Но вы обязаны не попадать в разные бесконечные петли.

person Naveed Abbas    schedule 23.08.2019