Как правильно использовать RMStore для получения первоначальной даты покупки приложения?

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

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

[[RMStore defaultStore] refreshReceiptOnSuccess:^{

    NSURL *url = [RMStore receiptURL];

    NSData *data = [NSData dataWithContentsOfURL:url];

    RMAppReceipt* r =[[RMAppReceipt alloc] initWithASN1Data:data];

    // Cheap and easy conversion to a float...
    //  IRL do a real comparison with the strings...

    if ([[r originalAppVersion] floatValue] < 2.0)
    {
        //  Do something for early-adopters
    }

} failure:^(NSError *error) {
    // Ruh-roh!
}];

У меня есть две проблемы:

  1. У меня нет действительной квитанции. Какая процедура для получения? Нужен ли идентификатор пакета приложения, который уже активен? Где-нибудь есть тестовые квитанции?

  2. Если я хочу основывать логику на датах, а не на номерах версий, могу ли я это сделать? Нет никаких originalPurchaseDate собственность на RMAppReciept, (Я подал проблему на GitHub.)

2 ответа

Решение

Как правильно использовать RMStore для получения первоначальной даты покупки приложения?

В квитанции такой информации нет. Вы можете получить дату покупки в приложении, однако. RMStore поможет вам с этим через RMAppReceiptIAP объект.

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

Как рекомендует @sergio, вы можете прочитать исходную версию приложения из квитанции приложения. Имейте в виду, что квитанции доступны только в iOS 7.

У меня нет действительной квитанции. Какая процедура для получения? Нужен ли идентификатор пакета приложения, который уже активен? Где-нибудь есть тестовые квитанции?

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

В качестве альтернативы вы можете настроить RMAppReceipt или смоделируйте это, чтобы проверить ваши различные рабочие процессы.

Если я хочу основывать логику на датах, а не на номерах версий, могу ли я это сделать? Там нет свойства originalPurchaseDate на RMAppReceipt,

Не с квитанцией приложения, так как на уровне приложения такого поля нет.

Кстати, избегайте обновления квитанции при запуске, так как она имеет тенденцию отображать запрос пароля Apple ID. Обновите, только если вы не нашли квитанцию ​​или информация отсутствует.

Может быть, вы хотите попробовать с:

RMAppReceipt* appReceipt = [RMAppReceipt bundleReceipt];    
if ([[appReceipt originalAppVersion] floatValue] < 2.0)


/**
 Returns the app receipt contained in the bundle, if any and valid. Extracts the receipt in ASN1 from the PKCS #7 container, and then parses the ASN1 data into a RMAppReceipt instance. If an Apple Root certificate is available, it will also verify that the signature of the receipt is valid.
 @return The app receipt contained in the bundle, or nil if there is no receipt or if it is invalid.
 @see refreshReceipt
 @see setAppleRootCertificateURL:
 */
+ (RMAppReceipt*)bundleReceipt;
Другие вопросы по тегам