Есть ли способ получить уведомление, когда кто-то делает покупку в приложении?

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

Кто-нибудь знает, как это сделать? Если нет, было бы здорово!

благодаря

4 Solutions collect form web for “Есть ли способ получить уведомление, когда кто-то делает покупку в приложении?”

Поиск покупок в магазине StoreKit

Когда происходит покупка, отправьте себе datapoint ( Отслеживайте здесь … )

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) { for transation in transactions { switch transation.transactionState { case .purchased: queue.finishTransaction(transation) // Track here... case .purchasing: break case .restored: break case .deferred: break case .failed: break } } } 

Льготные библиотеки

Используйте аналитику. Замените здесь // Track here... комментарий выше любым из приведенных ниже блоков. Не исчерпывающий список в алфавитном порядке:

Accengage

 NSString *currencyCode = [<SKProduct.priceLocale> objectForKey:NSLocaleCurrencyCode]; BMA4SPurchasedItem* item = [BMA4SPurchasedItem itemWithId(t.payment.productIdentifier) label:t.payment.productName category:<product.type> price:@(<SKProduct.price>) quantity:t.payment.quantity ]; [BMA4STracker trackPurchaseWithId:transaction.identifier currency:currencyCode items:@[item]]; 

Филиал

 NSDictionary *state = @{ @"itemId": @(t.payment.productIdentifier), @"price": <SKProduct.price>, @"itemName": <SKProduct.name>, @"currency":currencyCode }; [[Branch getInstance] userCompletedAction:@"purchase" withState:state]; 

Ткань (Crashlytics)

 NSString *currencyCode = [<SKProduct.priceLocale> objectForKey:NSLocaleCurrencyCode]; [Answers logPurchaseWithPrice:<SKProduct.price> currency:currencyCode success:@YES itemName:<product name> itemType:@"Purchase" itemId:@(t.payment.productIdentifier) customAttributes:@{}]; 

FlightRecorder

 FlightRecorder.sharedInstance().trackEventWithCategory( "Actions", action: "Purchase", label: "productIdentifier", value: t.payment.productIdentifier) 

Flurry Analytics

 let properties = ["productIdentifier":t.payment.productIdentifier] Flurry.logEvent("Purchase", withParameters: properties) 

Гугл Аналитика

 #import "GAI.h" #import "GAIDictionaryBuilder.h" id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker]; NSString *currencyCode = [<SKProduct.priceLocale> objectForKey:NSLocaleCurrencyCode]; [tracker send:[[GAIDictionaryBuilder createItemWithTransactionId:transactionIdentifier name:<product.localizedTitle> sku:t.payment.productIdentifier category:@"Purchase" price:<SKProduct.price> quantity:@(t.payment.quantity) currencyCode:currencyCode] build]]; 

См. Отслеживание покупок в приложении с помощью SDK Google Analytics iOS .

Аналитика кучи

 [Heap track:@"Purchase" withProperties:@{@"productIdentifier":@(t.payment.productIdentifier)} ]; 

Mixpanel Analytics (*)

 Mixpanel.sharedInstance().track("Purchased", properties: ["productIdentifier":transation.payment.productIdentifier]) properties:@{@"productIdentifier":@(t.payment.productIdentifier)}; 

(*) Обеспечивает поддержку отчетов Wi-Fi (позволяет отложить все отчеты до тех пор, пока сеть WiFi не будет доступна, чтобы не использовать данные сотовой связи) . См. mixpanelWillFlush ниже.

Parse.com

 NSDictionary *dimensions = @{@"productIdentifier":@(t.payment.productIdentifier)}; [PFAnalytics trackEvent:@“Purchase” dimensions:dimensions]; 

Отправить письмо с сервера

POST покупка по URL-адресу и, в свою очередь, сервер отправляет вам почтовое или другое уведомление.

iOS с использованием URLSession :

 if let url = URL(string: "https://<yoursite>/php/purchase.php") { var request = URLRequest(url: url) request.httpMethod = "POST" request.httpBody = "{\"productIdentifier\":\"\(transaction.payment.productIdentifier)\"}" .data(using: .utf8) request.addValue("application/json", forHTTPHeaderField: "Content-Type") request.addValue("application/json", forHTTPHeaderField: "Accept") let task = URLSession.shared.dataTask(with: request as URLRequest, completionHandler: {_,_,_ in }) task.resume() } 

отправитель электронной почты purchase.php :

 <?php try { header('Content-type: application/json'); $to = 'bounce@stackoverflow.com'; $subject = 'Purchase'; $message = $_POST['productIdentifier']; $headers = "From: " . $to . "\n"; @mail($to, $subject, $message, $headers) } catch (Exception $e) {} ?> 

► Найдите это решение на GitHub и получите дополнительную информацию о Swift Recipes .

Ткань (ранее Crashlytics ), помимо фантастической (и свободной) системы регистрации сбоев, также включает компонент «Ответы», который отслеживает статистику использования в режиме реального времени:

введите описание изображения здесь

Недавно они добавили возможность добавления пользовательского отслеживания событий, поэтому просто добавить к вам приложение «Приобретенное изделие». Добавление Crashlytics в ваше приложение занимает несколько секунд (и они проходят вас через процесс), и добавление настраиваемого события, как это, делает одну строку кода. С этого момента вы сможете отслеживать всевозможные сведения о сделанных покупках, количестве пользователей и любых других метаданных, которые вы хотите записать, все с задержкой около 3 секунд.

Я использую Crashlytics в течение многих лет (на самом деле на основе собственного вопроса StackOverflow ), и я НЕ рекомендую его достаточно высоко. Это бесплатно, легко и невероятно эффективно.

Я записываю все покупки IAP в таблицу на Parse.com. Очень легко выталкивать все данные из квитанции IAP до разбора. Я также выполняю невозобновляемые подписки, и я использую синтаксический анализ для синхронизации данных между устройством пользователя, так как StoreKit автоматически не делает это для невозобновляемых подписки.

Добавьте Parse в свой проект. Для этого следуйте краткому руководству: https://parse.com/apps/quickstart#parse_data/mobile/ios/native/existing

После установки синтаксиса добавьте PFObject *testObject = [PFObject objectWithClassName:@"TestObject"]; testObject[@"foo"] = @"bar"; [testObject saveInBackground]; PFObject *testObject = [PFObject objectWithClassName:@"TestObject"]; testObject[@"foo"] = @"bar"; [testObject saveInBackground]; на ваш полный код транзакции для каждой покупки в приложении. Например:

 - (void)completeTransaction:(SKPaymentTransaction *)transaction { NSLog(@"completeTransaction..."); [self provideContentForProductIdentifier:transaction.payment.productIdentifier]; // NEW CODE if ([transaction.payment.productIdentifier isEqualToString:@"company.app.iapra"]){ [[NSUserDefaults standardUserDefaults] setObject: @"No" forKey:KEY]; [[NSUserDefaults standardUserDefaults] synchronize]; PFObject *testObject = [PFObject objectWithClassName:@"IAP"]; testObject[@"TEST"] = @"Purchase Successful"; [testObject saveInBackground]; } if ([transaction.payment.productIdentifier isEqualToString:@"company.app.iap"]){ [[NSUserDefaults standardUserDefaults] setObject: @"YES" forKey:KEY]; [[NSUserDefaults standardUserDefaults] synchronize]; PFObject *testObject = [PFObject objectWithClassName:@"IAP"]; testObject[@"TEST"] = @"Purchase Successful"; [testObject saveInBackground]; } if ([transaction.payment.productIdentifier isEqualToString:@"company.app.iap"]){ [[NSUserDefaults standardUserDefaults] setObject: @"YES" forKey:KEY]; [[NSUserDefaults standardUserDefaults] synchronize]; PFObject *testObject = [PFObject objectWithClassName:@"IAP"]; testObject[@"TEST"] = @"Purchase Successful"; [testObject saveInBackground]; } if ([transaction.payment.productIdentifier isEqualToString:@"company.app.iap"]){ [[NSUserDefaults standardUserDefaults] setObject: @"YES" forKey:KEY]; [[NSUserDefaults standardUserDefaults] synchronize]; PFObject *testObject = [PFObject objectWithClassName:@"IAP"]; testObject[@"TEST"] = @"Purchase Successful"; [testObject saveInBackground]; } if ([transaction.payment.productIdentifier isEqualToString:@"company.app.iap"]){ [[NSUserDefaults standardUserDefaults] setObject: @"YES" forKey:KEY]; [[NSUserDefaults standardUserDefaults] synchronize]; PFObject *testObject = [PFObject objectWithClassName:@"IAP"]; testObject[@"TEST"] = @"Purchase Successful"; [testObject saveInBackground]; } if ([transaction.payment.productIdentifier isEqualToString:@"company.app.iap"]){ [[NSUserDefaults standardUserDefaults] setObject: @"YES" forKey:KEY]; [[NSUserDefaults standardUserDefaults] synchronize]; PFObject *testObject = [PFObject objectWithClassName:@"IAP"]; testObject[@"TEST"] = @"Purchase Successful"; [testObject saveInBackground]; } if ([transaction.payment.productIdentifier isEqualToString:@"company.app.iap"]){ [[NSUserDefaults standardUserDefaults] setObject: @"YES" forKey:KEY]; [[NSUserDefaults standardUserDefaults] synchronize]; PFObject *testObject = [PFObject objectWithClassName:@"IAP"]; testObject[@"TEST"] = @"Purchase Successful"; [testObject saveInBackground]; } // NEW CODE ^^ [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; } 

Не забудьте добавить #import <Parse/Parse.h> в начало вашего файла header.h.

Я не совсем уверен, что есть другие методы, вроде этого. Это довольно круто, поэтому наслаждайтесь и получайте удовольствие от просмотра уведомлений о покупке в приложении в реальном времени!

  • in-app Покупка с использованием пароля старой учетной записи при восстановлении
  • Получить срок действия подписки для покупки в приложении - начиная с appStoreReceiptURL
  • Есть ли способ узнать покупку, сделанную с помощью учетной записи iTunes? - iOS
  • Как получить динамический уровень цен для InApp Purchase?
  • Сохранение изменений после покупки в приложении
  • Непризнанный селектор отправлен в экземплярную ошибку с продуктом покупки приложения
  • Слияние платного приложения и бесплатного приложения с покупкой приложения
  • Код SKErrorDomain = 0 в приложении для покупок
  • Покупка нескольких расходных материалов за раз
  • Код SKErrorDomain = 0 «Не удается подключиться к iTunes Store»
  • paymentQueueRestoreCompletedTransactionsFinished: vs updatedTransactions:
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.