Кнопка восстановления покупок в приложении


Я впервые внедрил покупки в приложение в мое обновление приложения, только слишком ждать 3 недели и он был отклонен по следующей причине:

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

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

 [[SKPaymentQueue defaultQueue]   restoreCompletedTransactions];
Может ли кто-нибудь проверить, что это правильно и, скорее всего, все, что нужно? Хотелось бы, чтобы это прошло успешно и на этот раз. Заранее спасибо!
4 42

4 ответа:

Алекс, меня отвергли по той же причине на прошлой неделе, и это именно то, чего хотела Apple - после добавления такой кнопкиRestore они не задавали никаких других вопросов на эту тему.

Конечно, вам нужно не только вызвать [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];, но и реализовать само восстановление (я имею в виду предоставление контента пользователю).

Я использую вариант этого:

//inside of an IBaction
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
[[SKPaymentQueue defaultQueue]restoreCompletedTransactions];


// Then this is called
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue {
    NSLog(@"%@",queue );
    NSLog(@"Restored Transactions are once again in Queue for purchasing %@",[queue transactions]);  

    NSMutableArray *purchasedItemIDs = [[NSMutableArray alloc] init];
    NSLog(@"received restored transactions: %i", queue.transactions.count);

    for (SKPaymentTransaction *transaction in queue.transactions) {
        NSString *productID = transaction.payment.productIdentifier;
        [purchasedItemIDs addObject:productID];
        NSLog (@"product id is %@" , productID);
        // here put an if/then statement to write files based on previously purchased items
        // example if ([productID isEqualToString: @"youruniqueproductidentifier]){write files} else { nslog sorry}
    }  
}

Извините, я на своем iPad, если это не имеет смысла.

Альтернативой кнопке восстановления может быть переключатель восстановления в пакете настроек приложения . Он не перегружает пользовательский интерфейс и кажется, что Apple приветствует его (но не забудьте упомянуть, что вы реализовали механику таким образом).

BOOL shouldRestorePurchases = [[NSUserDefaults standardUserDefaults] boolForKey:@"restorePurchasesKey"];

Я был отвергнут по той же причине. Это связано с тем, что вы можете войти в систему с одним и тем же Apple ID на разных устройствах ios.

Например, предположим, что я вошел в систему test@iCloud.com на iPad. Когда я загружаю ваше приложение, я понимаю, что хотел бы удалить рекламу (допустим, у вас есть реклама в вашем приложении, если вы этого не делаете), поэтому я удаляю их для 99¢. Через год я решаю купить iPhone и войти в test@iCloud.com на этой учетной записи, и я снова загружаю ваше приложение. Объявления все еще идут там, хотя я уже заплатил за них. Кто захочет платить за одно и то же дважды? С помощью функции restore я могу восстановить покупки, сделанные на моем iPad, и заставить их работать на моем iPhone.

Чтобы восстановить покупку, вы можете использовать:

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

После этого Вам также нужно предоставить контент, который купил пользователь.