当有人进行应用程序内购买时,有没有办法通知?

我希望在有人在应用程序中进行应用程序内购买时得到通知,而不是等到第二天检查iTunes Connect以查看是否有任何销售。

有谁知道一个办法做到这一点? 如果不是的话,这将是非常酷!

谢谢

跟踪StoreKit购买活动

当购买发生时,给自己一个数据点( 轨道在这里…

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 } } } 

利用图书馆

使用分析。 用下面的任何一个块replace上面的// 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]]; 

使用Google Analytics iOS SDK查看应用内购买跟踪

堆分析

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

Mixpanel Analytics (*)

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

(*)提供对WiFi报告的支持(允许推迟所有报告,直到WiFinetworking可用,不使用蜂窝数据) 。 见下面的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上find这个解决scheme和Swift Recipes的更多细节。

Fabric (以前称为Crashlytics )除了是一个梦幻般的(免费的)崩溃日志系统之外,还包含一个名为Answers的组件,可以实时跟踪使用情况:

在这里输入图像说明

最近,他们添加了添加自定义事件跟踪的function,所以添加“购买产品”事件到您的应用程序是一件简单的事情。 将Crashlytics添加到您的应用程序需要几秒钟(他们会引导您完成整个过程),并添加一个像这样的自定义事件需要一行代码。 从此,您将能够跟踪关于所做的购买,用户数量和任何其他要logging的元数据的各种信息,所有这些信息都会延迟大约3秒钟。

我已经使用Crashlytics多年(实际上基于我自己的StackOverflow问题 ),我不能推荐它足够高。 这是免费的,简单的,令人难以置信的有效。

我将所有IAP购买logging在Parse.com中。 将IAP收据上的所有数据推送到parsing是很容易的。 我也在做不可更新的订阅,我使用parsing来同步用户设备之间的数据,因为StoreKit不会自动为非可再订阅订阅。

添加分析到您的项目。 为此,请按照快速入门指南: https : //parse.com/apps/quickstart#parse_data/mobile/ios/native/existing

一旦parsing设置,添加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文件的顶部。

我不太确定这里有没有其他的方法。 这是非常酷,所以享受和乐趣看着你的应用内购买通知实时显示!