Как вы определяете клиента/пользователя при получении Apple statusUpdateNotification для автоматического продления подписки?

Таким образом, Apple реализовала свое серверное уведомление для различных событий в жизненном цикле подписки.

Я был очень взволнован, чтобы начать это, но потом кажется, что есть какая-то вопиющая вещь, которую я упускаю. Я не уверен, как сопоставить данные уведомления с пользователем на моей стороне. Я удивлен, что нет идентификатора uid/apple, переданного с уведомлением для сопоставления. Возможно, я должен использовать original_transaction_id, но неясно, уникален ли он.

Кто-нибудь знает, что использовать в ответе на статус?


person jmichas    schedule 28.07.2017    source источник
comment
пожалуйста, сообщите нам, какие настройки вы сделали для получения этого уведомления об обновлении статуса от Apple. Пожалуйста, помогите нам здесь. Спасибо   -  person Sukeshj    schedule 01.08.2017


Ответы (2)


Я использую original_transaction_id, чтобы сопоставить событие с пользователем.

person Christian Brink    schedule 31.07.2017
comment
Да, я думаю, это то, что нужно использовать. Некоторые другие источники говорят, что нужно использовать это и идентификатор продукта, и это обеспечит его уникальность. Спасибо! - person jmichas; 01.08.2017
comment
Вопрос к вам, однако... Вы получаете уведомления? На самом деле я еще не получал никаких уведомлений таким образом, несмотря на то, что настроил URL-адрес уведомлений в iTunes Connect почти 24 часа назад. И я знаю, что с тех пор были как отмены, так и повторные активации. (Я знал, как сопоставлять квитанции с пользователями способом, описанным выше, потому что моему приложению нужно сделать это в другой ситуации.) - person Christian Brink; 01.08.2017
comment
Мы также не получаем statusUpdateNotification от сервера Apple. Мы проверили нормы безопасности Apple, и мы хороши для этого. stackoverflow.com/questions/45433136/ - person Sukeshj; 01.08.2017
comment
Любой, кто успешно получает эти уведомления: пожалуйста, сообщите нам об этом здесь. - person Christian Brink; 01.08.2017
comment
@ChristianBrink: я успешно получил это уведомление от Apple. Должен ли я записать ответ на этот вопрос? Или создать новую тему? - person Loint; 09.08.2017
comment
Спасибо Loint, я хотел бы знать больше. Я только что создал эту тему: stackoverflow.com/questions/45595499/ - person Christian Brink; 09.08.2017

Apple отправит на ваш сервер файл receipt_data. В receipt_data будет original_transaction_id. Но если вы только что получили original_transaction_id от Apple, вы не сможете определить, кто является покупателем этого товара. Так что, на мой взгляд, ваш сервер должен хранить уникальный идентификатор между original_transaction_id и user_id. Когда Apple отправляет receipt_data на перехватчик, который вы настроили для получения statusUpdateNotification от Apple, вы получите user_id от совпадения с original_transaction_id для помещения данных в вашу базу данных.

person Loint    schedule 13.09.2018
comment
Итак, как сопоставить userId с original_transaction_id? - person tounaobun; 08.01.2020
comment
не мог понять получить user_id из совпадения с original_transaction_id , в уведомлении о состоянии сервера, как мы можем установить user_id - person Vivek Chaturvedi; 08.01.2020
comment
Как определить пользователя из уведомления сервера INITIAL_BUY? - person HV Sharma; 09.03.2020
comment
@HVSharma Нашли ли вы решение для определения пользователя из уведомления сервера INITIAL_BUY? - person isuru; 16.09.2020
comment
@isuru Нет, я не определял пользователя из INITAL_BUY. Вместо этого я создал POST API, который будет вызываться, когда пользователь покупает любую подписку, поскольку вы получаете квитанцию ​​​​от внешнего интерфейса, вы проверяете ее с помощью сервера Apple, после чего вы проверяете, существует ли квитанция с этим transaction_id и original_transaction_id или нет , если нет, я создаю подписку для этого конкретного пользователя. Я думаю, это то, что я сделал. Да - person HV Sharma; 16.09.2020
comment
@HVSharma, как вы тогда справились с продлением подписки? - person ZN123; 13.03.2021
comment
@ ZN123 ZN123 Насколько я помню, вы получаете событие DID_RENEW, и в этом вы сопоставляете original_transaction_id с тем, которое вы сохранили в строке пользователя. - person HV Sharma; 15.03.2021
comment
@HVSharma, да, но я спрашиваю о событии PurchaseQueue на устройстве. Если вы подключили вызов POST API после завершения транзакции, он также будет вызван при обновлении, что не требуется, поскольку это уже было сделано через уведомление. Где вы тогда подключили первоначальный вызов API после покупки? - person ZN123; 16.03.2021