Когда квитанция приложения iOS недоступна?

Я хочу прочитать исходную версию приложения из квитанции приложения.

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

Итак, вот вопрос: если приложение загружается из Магазина в рабочей среде, гарантированно ли оно содержит квитанцию? Потому что в противном случае мне нужно было бы запустить запрос на обновление, который запрашивает у пользователя его учетные данные. И я не хочу делать это без контекста.

Если он недоступен, каковы наилучшие методы для этого случая? Включить SKReceiptRefreshRequest в процедуру «восстановления покупок»?

PS: приложение доступно только на iOS 9+.


person Frank Schlegel    schedule 23.09.2016    source источник


Ответы (1)


Изменить

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

См. это видео с WWDC 2014, начиная примерно с 48:30.


Второе редактирование

Другая ситуация, когда квитанция приложения будет отсутствовать, — это когда пользователь восстанавливает данные на новом устройстве. Квитанции приложения относятся к конкретному устройству, и их необходимо повторно загрузить для нового устройства.


Оригинальный ответ

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

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

Я предполагаю, что это будет работать во всех случаях, когда сеть доступна, но я делаю еще одну проверку в точке IAP. Как это...

                                                 ┌────────────┐                                            
                                                 │  Tap Add   │                                            
                                                 └────────────┘                                            
                                                        │                                                  
┌───────────────────────────────────────────────────────┤                                                  
│                                                       │                                                  
│                                                       ▼                                                  
│                                            ┌────────────────────┐                ┌──────────────────────┐
│              ┌──Don't Know─────────────────│ Pre-IAP customer?  │───Yes─────────▶│   Create new thing   │
│              │                             └────────────────────┘                └──────────────────────┘
│              │                                        │                                                  
│              │                                        │                          ┌──────────────────────┐
│              │                                        └──────No─────────────────▶│         IAP          │
│              │                                                                   └──────────────────────┘
│              │                                                                                           
│              ▼                        ┌────────────────────────────────────────┐                         
│  ┌──────────────────────┐             │Maybe: Allow one grace thing. Warn that │                         
│  │  Network Reachable?  │────No──────▶│ the user must connect to the internet  │                         
│  └──────────────────────┘             │      before adding another thing.      │                         
│              │                        └────────────────────────────────────────┘                         
│             Yes                                                                                          
│              │                                                                                           
│              ▼                        ┌────────────────────────────────────────────────────┐             
│  ┌──────────────────────┐             │  Maybe, depending on your requirements: Alert the  │             
│  │   Receipt Present?   │────No──────▶│user that the app receipt is not present and the app│             
│  └──────────────────────┘             │        store may ask for their credentials.        │             
│              │                        └────────────────────────────────────────────────────┘             
│             Yes                                                  │                                       
│              │                                     ┌─────────────┘                                       
│              ▼                                     ▼                                                     
│  ┌──────────────────────┐             ┌────────────────────────┐                                         
│  │        Valid?        │◀────────────│  Refresh the receipt.  │                                         
│  └──────────────────────┘             └────────────────────────┘                                         
│              │                                                                                           
│              └─Yes───┐                                                                                   
│                      ▼                                                                                   
│  ┌───────────────────────────────────────┐                                                               
└──│ Persist original_application_version  │                                                               
   └───────────────────────────────────────┘                      
person Murray Sagal    schedule 05.10.2016
comment
Спасибо за исчерпывающий ответ. Я просто блуждал, в таком случае квитанции там не будет и ее нужно будет запрашивать заново… Кстати, можно еще сделать локальную валидацию квитанции и/или прочитать из нее номер версии, тогда не нужно связаться с iTunes. - person Frank Schlegel; 07.10.2016
comment
Этот ответ был больше ответом на ваш последний вопрос о передовом опыте. Я не утверждаю, что мой подход является лучшей практикой. Просто я с этим справляюсь. Что касается локальной проверки, я оценил этот подход, но выбрал проверку в магазине приложений. Получение всех необходимых частей шифрования для локальной проверки нетривиально, по крайней мере для меня, и для завершения IAP мне все равно нужно поговорить с магазином приложений. - person Murray Sagal; 08.10.2016