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

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

Я смотрю в 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. Если я хочу основывать логику на датах, а не на номерах версий, могу ли я это сделать? На RMAppReciept нет собственности originalPurchaseDate. (Я зарегистрировал проблему на GitHub.)


person Moshe    schedule 09.07.2014    source источник
comment
На все ваши вопросы (в некоторой степени) даны ответы в документации Apple. RMStore отлично помогает избавить вас от написания стандартного кода, но я настоятельно рекомендую прочитать документацию Store Kit перед его использованием.   -  person hpique    schedule 09.07.2014


Ответы (2)


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

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

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

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

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

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

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

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

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

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

person hpique    schedule 09.07.2014

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

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;
person sergio    schedule 09.07.2014