ios - стоит - стоимость публикации приложения в app store




Обновление квитанции приложения для iOS: как определить, нужно ли пользователю входить в магазин приложений? (2)

В приложении App Store квитанция обычно существует. Он загружается из App Store вместе с приложением. Если пользователь загружает ваше приложение на свое устройство с помощью iTunes (т.е. из резервной копии), квитанция не будет.

Основной вариант использования для получения чека - это когда вы отлаживаете в XCode и ничего не сделали для загрузки чека (например, обновление чека или покупка чего-либо).

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

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

Я внедряю «Великую унифицированную квитанцию» Apple на iOS 7, которая позволяет приложению проверять квитанцию ​​о покупке приложения локально, не обращаясь к серверам Apple для проверки и подтверждения. Это прекрасно работает, если у пользователя есть квитанция, хранящаяся в приложении. В случае, если приложение пропускает квитанцию, лучше всего запросить у приложения обновление квитанции, как таковое:

    SKReceiptRefreshRequest *request = [[SKReceiptRefreshRequest alloc] init];
    [request setDelegate:self];
    [request start];

Проблема заключается в том, что при вызове этого кода пользователю будет предложено войти с его или ее Apple ID. Я не уверен на 100%, происходит ли это все время, или только если время входа пользователя в магазин приложений истекло. Я не хочу отображать экран входа в систему Apple ID пользователям, если в этом нет особой необходимости - я не хочу, чтобы люди беспокоились о том, что с них будет взиматься неправильная плата. Я хотел бы показать дисплей, показывающий пользователю, почему его попросят ввести пароль Apple ID, но только если ему действительно потребуется ввести свой пароль. Если им не нужно вводить свой пароль, я хочу, чтобы это был простой и скрытый процесс. Какой лучший способ продолжить? Я думаю, что лучшим способом было бы проверить, нужно ли пользователю входить в магазин приложений, но я не уверен, возможно ли это.


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

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

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

Вам не нужно повторно скачивать квитанцию, которая, как вы знаете, не существует. Если пользователь не купил или не восстановил квитанцию, вы можете избежать попыток повторной загрузки квитанции и вообще отказаться от просмотра предупреждений. Это то, что я сделал:

if([[NSFileManager defaultManager] fileExistsAtPath:[[[NSBundle mainBundle] appStoreReceiptURL] path]] != YES)
{
    SKReceiptRefreshRequest *refresh = [[SKReceiptRefreshRequest alloc] initWithReceiptProperties:nil];
    [refresh start];
}

Я поместил это в свой файл main.m перед основным циклом приложения, так как в моем приложении есть много «профессиональных» функций, которые разблокируются с помощью IAP, но вы действительно можете поместить это там, где сочтете это актуальным.

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

Если вы хотите, вы можете поместить этот код в любое место, где пользователь может использовать функцию «pro» вашего приложения. SKReceiptRefreshRequest наследуется от SKRequest и поэтому будет вызывать методы SKRequestDelegate . Таким образом, в тот момент, когда пользователь переходит на экран с профессиональной функцией, вы можете обновить квитанцию, а затем активировать эту функцию при вызове методов делегата (и после выполнения дополнительной работы по проверке содержимого квитанции).

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





apple-id