Автоматически обновляемый поток пользователей подписки 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
  }
}  

Кажется, это работает. Если у кого-то есть другие предложения, дайте мне знать.

Другие вопросы по тегам