Автоматически обновляемый поток пользователей подписки IAP и обновления квитанций
Я использую библиотеку RMStore - вот что у меня сейчас есть.
1) Купите подписку с автоматическим продлением и подтвердите полученную квитанцию.
[[RMStore defaultStore]addPayment:[Environment environment].premiumProductIAPId success:^(SKPaymentTransaction *transaction) {
[[RMStore defaultStore].receiptVerificator verifyTransaction:transaction success:^{
//enable premium service
} failure:^(NSError *error) {
}];
} failure:^(SKPaymentTransaction *transaction, NSError *error) {
}];
2) При каждом запуске приложения проверяйте, активна ли подписка на дату, и включите премиум-сервис, если он
RMAppReceipt *appReceipt = [RMAppReceipt bundleReceipt];
if (appReceipt){
NSInteger isActive = [appReceipt containsActiveAutoRenewableSubscriptionOfProductIdentifier:[Environment environment].premiumProductIAPId forDate:[NSDate date]];
//enable premium service if active
}
3) Если пользователь запускает приложение на другом устройстве, разрешите ему восстановить покупки, обновив квитанцию, если она существует, и проверив, есть ли активная подписка на покупки.
"In most cases, all your app needs to do is refresh its receipt and deliver the products in its receipt."
- Это из руководства. Вот код:
[[RMStore defaultStore]refreshReceiptOnSuccess:^{
if ([receipt containsActiveAutoRenewableSubscriptionOfProductIdentifier:[Environment environment].premiumProductIAPId forDate:[NSDate date]]){
//enable
}else{
//no longer active
}
} failure:^(NSError *error) {
}];
Мои вопросы:
- Когда RMStore проверяет, активна ли подписка, она может вернуть "нет", я просматриваю квитанцию, и она верна, и я предполагаю, что она не была автоматически продлена. Когда я иду, чтобы купить другую подписку, я получаю сообщение от itunes, говорящее, что я уже подписан. При последующем запуске я вижу новую квитанцию. Это означает, что квитанция должна быть обновлена при запуске, но я не хочу ее обновлять, поскольку она вызывает всплывающее имя пользователя и пароль, которые не нужны. Какова лучшая практика здесь?
- Правильно ли я восстанавливаю подписки для другого устройства? Кажется, иногда требуется более одной попытки восстановить подписки.
- Есть ли необходимость в хранении подписок на моем сервере, кроме ведения учета?
1 ответ
Я собираюсь попытаться ответить на мой вопрос.
Может быть возобновление, которое не обнаруживается первым делом при запуске, поэтому подписка кажется неактивной.
Я добавил наблюдателя для прослушивания завершенных транзакций (RMStore расширяет эту функциональность StoreKit).
Каждый раз, когда я получаю это уведомление, я проверяю (теперь обновленную) квитанцию на активную подписку и включаю премиум-сервис, если он есть.
- (void)storePaymentTransactionFinished:(NSNotification*)notification
{
BOOL isActive = [[RMAppReceipt bundleReceipt] containsActiveAutoRenewableSubscriptionOfProductIdentifier:[Environment environment].premiumProductIAPId forDate:[NSDate date]];
if (isActive){
//enable premium
}
}
Кажется, это работает. Если у кого-то есть другие предложения, дайте мне знать.