Платное приложение для бесплатного приложения с покупкой In-App [дубликат]

Очистить и перестроить

. «Чистая» сборки может удалить «мертвую древесину», которая может быть оставлена ​​лежащей рядом с предыдущими сборками, неудачными сборками, неполными сборками и другими проблемами сборки.

В общем случае среда IDE или сборка будет включать в себя некоторую форму «чистой» функции, но это может быть неправильно настроено (например, в ручном файле) или может завершиться неудачей (например, промежуточные или результирующие двоичные файлы - только).

После завершения «очистки» убедитесь, что «чистый» преуспел, и весь сгенерированный промежуточный файл (например, автоматический файл makefile) был успешно удален.

Этот процесс можно рассматривать как конечный вариант, но часто является хорошим первым шагом ; особенно если недавно был добавлен код, связанный с ошибкой (локально или из исходного репозитория).

28
задан rmaddy 15 October 2013 в 23:01
поделиться

7 ответов

Не было бы проще просто предложить бесплатную покупку inapp при запуске в платном приложении. Кнопка с надписью «Обновление». А затем переключите этот бесплатный анапп на оплату следующего обновления?

-1
ответ дан Jason Mirk 27 August 2018 в 16:51
поделиться

В itunes connect вы можете создавать коды продвижения для покупок приложений. Вы можете создать элемент IAP для премиум-функций и предоставить его в качестве поощрения для покупателей вручную. Хотя это не автоматическое решение, это может спасти вас от головной боли.

-2
ответ дан mtozsahin 27 August 2018 в 16:51
поделиться

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

-2
ответ дан neilco 27 August 2018 в 16:51
поделиться

попробуйте получить все квитанцию ​​& amp; проанализируйте их следующими данными:

"expires_date" = "2017-09-24 11:25:19 Etc/GMT";
"original_purchase_date" = "2017-09-24 11:20:21 Etc/GMT";
"product_id" = "com.yourapp.service";

1. Получите все квитанции пользователя из магазина приложений

+ (NSArray*)all_receipts{
    // Load the receipt from the app bundle.
    NSURL *receiptURL = [[NSBundle mainBundle]appStoreReceiptURL];
    NSData *receipt = [NSData dataWithContentsOfURL:receiptURL];
    if(!receipt){
        //no receipts yet...
        return nil;     
    }

    NSError *error;
    NSDictionary *requestContents = @{@"receipt-data": [receipt base64EncodedStringWithOptions:0],
                                      @"password":YOUR_SECRED_SHARED};
    NSData *requestData = [NSJSONSerialization dataWithJSONObject:requestContents
                                                          options:0
                                                            error:&error];
    if (!requestData) {
        return [NSArray array];
    }

    // Create a POST request with the receipt data.
    //get current qa / production url
    BOOL sandbox = [[receiptURL lastPathComponent]isEqualToString:@"sandboxReceipt"];
    NSURL *storeURL = [NSURL URLWithString:@"https://buy.itunes.apple.com/verifyReceipt"];
    if (sandbox) {
        storeURL = [NSURL URLWithString:@"https://sandbox.itunes.apple.com/verifyReceipt"];
    }
    NSDictionary *jsonResponse = [LTServer postUrl:storeURL.absoluteString attach:requestContents];
    NSLog(@"jsonResponse %@",jsonResponse);
    if(!jsonResponse){
        return [NSArray array];
    }
    NSArray *receipts_data = jsonResponse[@"latest_receipt_info"];
    return [receipts_data mutableCopy];
}

2. Каждая квитанция будет содержать словарь:

    "expires_date" = "2017-09-24 11:25:19 Etc/GMT";
    "expires_date_ms" = 1506252319000;
    "expires_date_pst" = "2017-09-24 04:25:19 America/Los_Angeles";
    "is_trial_period" = true;
    "original_purchase_date" = "2017-09-24 11:20:21 Etc/GMT";
    "original_purchase_date_ms" = 1506252021000;
    "original_purchase_date_pst" = "2017-09-24 04:20:21 America/Los_Angeles";
    "original_transaction_id" = 1000000339209266;
    "product_id" = "com.yourapp.service";
    "purchase_date" = "2017-09-24 11:20:19 Etc/GMT";
    "purchase_date_ms" = 1506252419000;
    "purchase_date_pst" = "2016-11-27 04:20:19 America/Los_Angeles";
    quantity = 1;
    "transaction_id" = 1000000337203266;
    "web_order_line_item_id" = 1000000030161297;
0
ответ дан Ofir Malachi 27 August 2018 в 16:51
поделиться

Начиная с iOS 7, это можно сделать, используя правильную проверку чека. В iOS 7 вы можете получить квитанцию ​​для купленного приложения. Часть данных в квитанции содержит информацию об исходной версии покупки приложения пользователем. Вы можете посмотреть эту версию, и если она находится до освобождения вашего обновления, чтобы освободить его с помощью IAP, вы можете предоставить пользователю полную функциональность без необходимости повторного приобретения обновления.

Конечно, если вы хотите, чтобы ваше обновленное приложение работало под iOS 6, это не вариант.

Подробнее о проверке получения см. в Руководство по проверке чеков .

62
ответ дан rmaddy 27 August 2018 в 16:51
поделиться

Не совсем, нет. Лучшее, что вы можете сделать, это опубликовать обновление, в то время как оно все еще является платным приложением, которое записывает некоторое значение в NSUserDefaults (или файл в каталоге данных приложения, не имеет значения, какой) указывает, что он был куплен. Подождите неделю или сколько угодно времени, затем опубликуйте обновление, которое удалит этот код, приуроченный к выпуску в тот же день, когда цена будет изменена на бесплатную.

-4
ответ дан RyanR 27 August 2018 в 16:51
поделиться

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

  1. Проверяет данные по умолчанию / keychain
  2. . Если найдено, включите оплаченный content / disable ads
  3. Перенесите эти данные на новый ключ (чтобы вы не обновлялись снова и не раздавали бесплатные материалы)
1
ответ дан Wain 27 August 2018 в 16:51
поделиться