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

Я хотел бы отслеживать покупки в приложении с помощью Google Analytics SDK для iOS v2, как указано в руководстве Отслеживание электронной торговли.

В настоящее время я делаю следующее после получения обновления транзакции SKPaymentTransactionStatePurchased:

- (void) trackTransaction:(SKPaymentTransaction*)transaction
{
    NSString *transactionIdentifier = transaction.transactionIdentifier;
    GAITransaction *gaiTransaction = [GAITransaction transactionWithId:transactionIdentifier withAffiliation:@"App Store"];

    SKPayment *payment = transaction.payment;
    NSString *productIdentifier = payment.productIdentifier;
    SKProduct *product = [self productForIdentifier:productIdentifier];
    NSString *productTitle = product.localizedTitle;
    int64_t priceInMicros = product.price.floatValue * 1000000; // FIXME: Doesn't consider different currencies
    [gaiTransaction addItemWithCode:productIdentifier name:productTitle category:nil priceMicros:priceInMicros quantity:payment.quantity];

    gaiTransaction.revenueMicros = priceInMicros * payment.quantity; // FIXME: doesn't consider Apple cut

    id<GAITracker> tracker = [GAI sharedInstance].defaultTracker;
    [tracker trackTransaction:gaiTransaction];
}

Является ли вышеприведенный способ отслеживания покупок в приложении? Я обнаруживаю две проблемы, по крайней мере:

  • SKProduct возвращает локализованную цену, и если я ее отслеживаю как-то, то агрегирование доходов будет неверным. Есть ли способ нормализовать цену?
  • Возвращенная выручка не учитывает Apple, что не всегда составляет 30%. Можно ли получить чистый доход в приложении?

Ответы

Ответ 1

SKProduct возвращает локализованную цену, и если я отслеживаю ее как доход агрегация будет неправильной. Есть ли способ нормализовать цену?

Google Analytics SKD для iOS v3 добавила поддержку валют. Отслеживание транзакции выглядит следующим образом:

- (void)storePaymentTransactionFinished:(NSNotification *)notification
{
    SKPaymentTransaction *paymentTransaction = notification.transaction;
    if (paymentTransaction.transactionState == SKPaymentTransactionStateRestored) return;

    SKPayment *payment = paymentTransaction.payment;
    NSString *sku = payment.productIdentifier;
    SKProduct *product = [[RMStore defaultStore] productForIdentifier:sku];
    NSLocale *priceLocale = product.priceLocale;
    NSString *currencyCode = [priceLocale objectForKey:NSLocaleCurrencyCode];
    NSString *transactionId = paymentTransaction.transactionIdentifier;
    NSNumber *productPrice = product.price;
    {
        NSNumber *revenue = @(productPrice.floatValue * payment.quantity);
        GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createTransactionWithId:transactionId
                                                                          affiliation:@"App Store"
                                                                              revenue:revenue
                                                                                  tax:0
                                                                             shipping:0
                                                                         currencyCode:currencyCode];
        NSDictionary *parameters = [builder build];
        [_tracker send:parameters];
    }
    {
        GAIDictionaryBuilder *builder = [GAIDictionaryBuilder createItemWithTransactionId:transactionId
                                                                                     name:product.localizedTitle
                                                                                      sku:sku
                                                                                 category:@"In-App Purchase"
                                                                                    price:productPrice
                                                                                 quantity:@(payment.quantity)
                                                                             currencyCode:currencyCode];
        NSDictionary *parameters = [builder build];
        [_tracker send:parameters];
    }
}

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

Возвращенная выручка не учитывает Apple, которая не всегда 30%. Можно ли получить чистый доход в пределах приложение?

Нет.

Ответ 2

Хороший вопрос, позор, у вас нет ответов на это, поскольку я только что столкнулся с той же проблемой.

Чтобы стимулировать обсуждение этой темы, я хотел бы предложить этот "обходной путь".

NSString *affiliation = [product.priceLocale objectForKey:NSLocaleCurrencyCode];  
GAITransaction *gaiTransaction = [GAITransaction transactionWithId:transactionIdentifier withAffiliation:affiliation];

Идея состоит в том, что вы не можете ничего делать с различными валютами в приложении. Вместо этого вам нужно переместить проблему в Google Analytics и использовать ее фильтрацию для выработки прибыли в национальном магазине приложений.

Итак, если это сделка в США, партнер будет "USD".

Что касается

забрать Apple, что не всегда 30%

Это новость для меня. У меня сложилось впечатление, что 30% было поставлено на камень Apple. Поэтому я просто увеличиваю доход на 0,7