Перенос идентификаторов регистрации токенов устройства из Urban Airship в Firebase Cloud Messaging

Из документа об удалении городского дирижабля я получил следующую информацию:

Нам жаль, что вы уходите, но мы хотим, чтобы ваш переход прошел гладко. Вот некоторые вещи, о которых вам нужно позаботиться: Выполните вызов API, чтобы получить доступ ко всем токенам вашего устройства и регистрационным идентификаторам GCM. Почему? Это обеспечит возможность переноса этих токенов и идентификаторов, чтобы устройства, которые уже включили push-уведомления на iOS, не получали приглашения сделать это снова, если у клиента есть идентификатор пакета приложений. http://docs.urbanairship.com/api/ua.html#device-listing.

Мне удалось получить идентификаторы APID Android, зарегистрированные в моем приложении, с помощью GET / api / apids и информации под заголовком «Список APID» по адресу http://docs.urbanairship.com/api/ua.html#списокустройств. Однако я не уверен, как использовать APID в Firebase Cloud Messaging. Я хочу получить все токены моего устройства и регистрационные идентификаторы Firebase Cloud Messaging от Urban Airship, но не значения, уникальные для Urban Airship. У меня сложилось впечатление, что APID уникальны для городского дирижабля точно так же, как идентификаторы каналов (полученные на Java с помощью UAirship.shared().getPushManager().getChannelId()) также уникальны для городского дирижабля. Я пытаюсь экспортировать токены устройств из Urban Airship, чтобы использовать их из Firebase Cloud Messaing независимо от Urban Airship. Другими словами, я хочу перенести устройства с Urban Airship. Есть ли способ получить токены устройства в том же формате, в котором их возвращает метод FirebaseInstanceId.getInstance().getToken()? Этот формат будет выглядеть так:

f32EVa9yfbo: AJA91bFg53ZuQLWYSDDqPlkf4a88Lu6Gp4DoXVDJ2wRIlnjDngq0UdNnlSi7wxbbut6YX7Z1kmvyS3bhk_Zrl-1doHCf5XFdOXSFWNZo_Zrl-1doHCf5XFdOXBFJTJNZo_XFdXFdXTJNZo_CXFdXFDXTJNZo_CXFdXTJTJNZo_XFdXFDXTJNZ0

Спасибо.

ОБНОВЛЕНИЕ 1:

Я нашел способ получить регистрационный идентификатор GCM:

Шаг 1. Использование GET /api/apids для получения идентификаторов Android APID, зарегистрированных в этом приложении, вместе со связанными метаданными:

C:\curl>curl -k https://go.urbanairship.com/api/apids/ -u "<AppKey>:<MasterSecret>" -H "Content-Type: application/json" -X GET |more
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                             Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0{
  "next_page" : "https://go.urbanairship.com/api/apids/?start=0584f193-07a0-49f7-b2d3-92f8e05ur6b5&limit=1000",
  "apids" : [ {
"tags" : [ "City-1" ],
"alias" : null,
"active" : false,
"created" : "2017-07-17 23:02:40",
"apid" : "00027235-66b4-4433-a40f-254532d8abd1"
  }, {
"tags" : [ "City-1" ],
"alias" : null,
"active" : true,
"created" : "2017-09-14 15:41:35",
"apid" : "00036ca3-d628-4353-be92-0dc6fe03afc6"
      }, {
"tags" : [ "city-2" ],
"alias" : null,
"active" : true,
"created" : "2017-09-18 16:38:39",
"apid" : "000222f5-824a-42f2-8ba0-c58b4c2fb2a2"
  }, {
"tags" : [ "city-2" ],
-- More  --

В результате получился длинный массив, содержащий множество apid.

Шаг 2. Использование GET /api/apids/(APID) для получения информации об определенном Android APID

C:\curl>curl -k https://go.urbanairship.com/api/apids/000222f5-824a-42f2-8ba0-c58b4c2fb2a2 -u "<AppKey>:<MasterSecret>" -H "Content-Type: application/json" -X GET
{"last_registration":"2017-12-14 17:36:05","created":"2017-10-19 17:05:18","gcm_registration_id":"bIY0GH6-hqk:APA91bH2xUBtlfga2kBG0GjvjbBYrI3M72BbXc3tTo7pSuY61w1wrgOeTbEqEd5J2SmUcQx25uU8TafWk2tDP7Vf7bc0ZsQrtENlFJDNIb--LUVuZimjOegyaepPYuQvm_9gmJDsviwY","apid":"000222f5-824a-42f2-8ba0-c58b4c2fb2a2","alias":"","active":true,"tags":["city-2"]}

Теперь я вижу, что что-то возвращается в формате, который Firebase Cloud Messaging может распознать как идентификатор токена устройства и который я могу использовать для отправки push-уведомления из Firebase Cloud Messaging без Urban Airship:

bIY0GH6-hqk: APA91bH2xUBtlfga2kBG0GjvjbBYrI3M72BbXc3tTo7pSuY61w1wrgOeTbEqEd5J2SmUcQx25uU8TafWk2tDP7Vf7rt_imlFuU8TafWk2tDP7Vf7rt_imlFuJsQugyDNGyVf7rtbimlFuJsQugydnvf7vf7bjdjdjdjdjdjdjdjdjdnvf7vf7bmc0ZsQdn

Теперь я вижу сложность в том, что, как вы можете видеть выше, мне пришлось предоставить конкретный APID, чтобы получить gcm_registration_id для этого APID. Когда я использую только GET /api/apids, как я привел пример в шаге 1 выше, я не получаю никакого gcm_registration_id в возвращаемом массиве. Это делает процесс получения gcm_registration_id значений чрезвычайно утомительным и долгим, потому что мне пришлось бы использовать GET /api/apids/(APID), как в примере, который я написал на шаге 2, для каждого APID, возвращаемого «GET / api / apids», который я написал на шаге 1. Если у меня есть, например, 70 000 значений APID, мне пришлось бы проделать этот утомительный процесс 70 000 раз, если я не напишу сценарий или какой-либо способ автоматизировать процесс загрузки APID. Возможно ли, что когда я использую GET /api/apids, как на шаге 1, я могу сразу получить gcm_registration_id значения как часть массивов в метаданных? Это упростило бы процесс загрузки значений gcm_registration_id, чтобы я мог использовать их в Firebase Cloud Messaging.

Кроме того, я хотел бы получить подтверждение, являются ли значения gcm_registration_id, которые я вижу, значениями идентификатора токена устройства, которые я могу использовать в Firebase Cloud Messaging для отправки push-уведомлений на устройства без использования Urban Airship.

ОБНОВЛЕНИЕ 2:

Проблема в том, что мне нужно использовать https://go.urbanairship.com/api/apids/{apid}, чтобы увидеть значения gcm_registration_id, и я не хочу этого делать, потому что, если бы у меня было 70000 зарегистрированных устройств, мне пришлось бы сделать 70000 запросов cURL, предоставляющих каждое из 70000 {apid} значений 70000 раз . Это займет вечность! Если я использую только https://go.urbanairship.com/api/apids/ без {apid}, возвращаемый массив не будет содержать gcm_registration_id значений.

ОБНОВЛЕНИЕ 3:

Это решение, пишущее код Java с запросом к https://go.urbanairship.com/api/apids, чтобы получить и сохранить массив значений APID, а затем передать каждый элемент этого массива как {apid}, чтобы затем выполнить цикл запросов к https://go.urbanairship.com/api/apids/{apid}, чтобы получить все токены устройства GCM / FCM, зарегистрированные в моем приложении. ? Я предполагаю, что один запрос cURL к https://go.urbanairship.com/api/apids может быть недостаточно для получения всех токенов устройств GCM / FCM, зарегистрированных в моем приложении; а запросы, массивы и циклы в коде Java могут быть необходимыми для получения тех токенов, которые я пытаюсь загрузить. Буду признателен, если кто-нибудь подтвердит это.


comment
Вы пробовали API списка каналов? Это должно вернуть любой push-адрес, зарегистрированный для устройства, а не только идентификатор Urban Airship. docs.urbanairship.com/api/ua/#channel-list-api < / а>   -  person gatlinhebert    schedule 19.12.2017
comment
@gatlinhebert Да, я уже пробовал идентификаторы каналов. Я перешел к заголовку "Список каналов" по адресу docs.urbanairship.com/api/ua / # channel-list-api и в примере ответа в этом разделе вы можете увидеть, что ответ не включает никаких gcm_registration_id. Кроме того, я связался со службой поддержки Urban Airship, чтобы узнать об идентификаторах каналов, и они сказали: «Идентификаторы каналов уникальны для Urban Airship». Однако вы можете экспортировать токены устройств из UA. Я приложил наш вспомогательный документ, в котором даются некоторые полезные рекомендации по переносу устройств с UA. Внештатный док. ссылка на UA API.   -  person Jaime Montoya    schedule 19.12.2017
comment
@gatlinhebert Я только что понял, что ваш комментарий уже дал ответ, который я в конечном итоге получил от группы поддержки городских дирижаблей. Вы можете поместить свой комментарий в качестве ответа, чтобы я мог выбрать его как лучший ответ, хотя я ответил на свой вопрос и предоставил детали, которые могут помочь кому-то с той же проблемой в будущем. Спасибо.   -  person Jaime Montoya    schedule 21.12.2017


Ответы (1)


Я получил ответ от Центра поддержки городских дирижаблей, и они объяснили мне, что токен GCM / FCM для устройств Android называется push_address. Я пошел проверить эти значения и увидел, что они имеют формат, который использует Firebase Cloud Messaging, так что я наконец-то смог загрузить токены с помощью API Urban Airship. Это ответ их техподдержки:

[Имя сотрудника] (Центр поддержки городских дирижаблей)

20 декабря, 17:10 по тихоокеанскому стандартному времени

Привет, Хайме,

Это [Имя сотрудника] службы технической поддержки Urban Airship.

Попробуйте использовать /api/channels конечную точку. Значение push_address должно быть токеном GCM / FCM для устройств Android. Ответ разбивается на страницы и содержит значение next_page.

Если вам нужна помощь в извлечении данных из этой конечной точки или она не содержит данных, которые вы ищете, сообщите мне.

Спасибо, [Имя сотрудника] Служба технической поддержки Urban Airship Портленд, Орегон

Например, я использую следующий запрос, и вы можете увидеть, как я получаю токены устройства GCM / FCM. Примечание: я произвольно изменил символы в токенах, но вы все еще можете увидеть формат.

C:\curl>curl -k https://go.urbanairship.com/api/channels/ -u "<AppKey>:<MasterSecret>" -H "Content-Type: application/json" -X GET |more
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                             Dload  Upload   Total   Spent    Left  Speed
100  683k    0  683k    0     0   227k      0 --:--:--  0:00:03 --:--:--  205k
{"ok":true,"channels":[{"channel_id":"00099045-24a4-2523-a80f-876423d8abd2","device_type":"android","installed":false,"background":false,"push_address":"c2XddiCxuLf:APA91bG8-XqUuyZKnf3A0zJI7xFi3_KsOvyS7X9t2fDYpECKhMGcMdcIjggRfFcr0GAnQCDB9qRn9goC1wcVWxT2aapu578v83LlcgsgqvPFC0dZCVNi0CTZyRA4A4B0dQY7aVgWhxh2","named_user_id":null,"alias":null,"tags":["city-1"],"tag_groups":{"timezone":["America/Costa_Rica"],"ua_android_app_version":["1.21"],"ua_locale_country":["US"],"ua_locale_language":["es"],"ua_android_sdk_version":["8.3.X"],"ua_android_version":["5.1.X"],"ua_location_enabled":["false"],"ua_opt_in":["false"],"ua_background_enabled":["false"]},"created":"2017-07-17T23:02:40","opt_in":false,"last_registration":"2017-08-05T02:33:26"},{"channel_id":"00032ba5-d613-4323-be92-0ac6fe04cfd6","device_type":"android","installed":true,"background":true,"push_address":"ceG5aSa0i6o:ERT91bF0UPUvbEzP4UnlwonfyFVc55FcecQkCesXcqhJglY5UlqIAN88VwH7xadEIoWj4FsHZsYu56jiHzUJqozPawXPGNPW71TbVFeFLVNWBkzpqDgt-8Kftj-ce_Z_vpKNIrXvlAwQ","named_user_id":null,"alias":null,"tags":["city-1"],"tag_groups":{"timezone":["America/Chicago"],"ua_android_app_version":["1.21"],"ua_locale_country":["SV"],"ua_locale_language":["es"],"ua_android_sdk_version":["8.3.X"],"ua_android_version":["6.0.X"],"ua_location_enabled":["false"],"ua_opt_in":["true"],"ua_background_enabled":["true"]},"created":"2017-09-14T15:41:35","opt_in":true,"last_registration":"2017-12-20T13:12:09"},.........

ОБНОВЛЕНИЕ 1: Где найти <AppKey>:<MasterSecret> кода, который я показываю выше? Он находится по адресу https://go.urbanairship.com/apps/. Перейдите на страницу настроек и найдите его в областях, которые я выделил овалами ниже:

введите здесь описание изображения

ОБНОВЛЕНИЕ 2: если мы знаем городской дирижабль channel_id, мы можем получить push_address (то, что городской дирижабль называет push_address, является GCM/FCM device token ID). Например, представьте, что я знаю, что городской дирижабль channel_id моего телефона - это 88cb7c8a-a207-4136-b55f-97d7238df916. Затем я могу использовать API дирижабля (https://docs.airship.com/api/ua/) для выполнения следующей команды cURL:

C:\curl>curl -k https://go.urbanairship.com/api/channels/88cb7c8a-a207-4136-b55f-97d7238df916 -u "<AppKey>:<MasterSecret>" -H "Content-Type: application/json" -X GET |more
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                             Dload  Upload   Total   Spent    Left  Speed
100   739  100   739    0     0    739      0  0:00:01 --:--:--  0:00:01  1213
{"ok":true,"channel":{"channel_id":"88cb7c8a-a207-4136-b55f-97d7238df916","device_type":"android","installed":true,"background":true,"push_address":"cbDusDAn_zE:APA91bF9su16_w4DD5qE5OgM_4E23FvIQJa84UWtvUz7zcdFf3B9WijdL1v1IaWwQTSg74doE_RMdJiCvYH1hJgWS7ELaujxhdz1SQ24EInef9JKfz3a27PTRYreTG_vMuTYkLa5T7f5","named_user_id":null,"alias":null,"tags":["guatemala-city"],"tag_groups":{"timezone":["America/Chicago"],"ua_android_app_version":["1.24"],"ua_locale_country":["US"],"ua_locale_language":["en"],"ua_android_sdk_version":["8.3.X"],"ua_android_version":["6.0.X"],"ua_location_enabled":["false"],"ua_opt_in":["true"],"ua_background_enabled":["true"]},"created":"2018-12-26T14:56:44","opt_in":true,"last_registration":"2019-05-18T06:55:39"}}

C:\curl>
person Jaime Montoya    schedule 21.12.2017