Я нашел решение, немного «трюк», не столь очевидное, как явное «хранилище изменило уведомление».
Вы можете прослушать ошибки каждой транзакции в - paymentQueue: updatedTransactions:
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for(SKPaymentTransaction* transaction in transactions)
{
NSError* transactionError = transaction.error;
if(transactionError != nil && transactionError.code == SKErrorUnknown)
{
NSLog(@"User potentially switched stores");
[self refreshAllProductInfo];
}
}
}
Это может вызвать во время других ошибок, но до сих пор я только видел, чтобы вызвать при смене магазина.
При этом, когда пользователь видит, например, цены в долларах США, а затем входит в систему с учетной записью в $ GBP, цены будут обновляться до их GBP-версий.