Push-уведомление Bluemix с идентификатором пользователя

Я использую новейшую службу push-уведомлений Bluemix. Я использую API MFPPush для регистрации устройства (Android).

Вот мой фрагмент кода:

var success = function(message) 
{ 
    console.log("Success: " + message);
    alert("Reg Device: " + message);
};
var failure = function(message) 
{ 
    console.log("Error: " + message); 
    alert("Error: " + message);
};
MFPPush.registerDevice({}, success, failure);
var notification = function(notification)
{
    // notification is a JSON object.
    alert(notification.message);
};
MFPPush.registerNotificationsCallback(notification);

Сообщение об успешном завершении содержит следующую информацию:

Token:APA91bFtkSr59Zxlr52HU****Uij
UserId: ""
DeviceId: g5c6d98f-0867-3fd1-a353-15bcdef675a2

Когда я отправляю уведомление, мое устройство получает сообщение.

Swagger REST API показывает, что я могу произвольно указать токен, userId и deviceId:

{
  "deviceId": "TestDeviceId",
  "platform": "G",
  "token": "************",
  "userId": "Joe"
}

Как получить "TestDeviceId" и как получить "token"? Я не вижу никакого API для получения этой информации.


person anamica    schedule 08.07.2016    source источник


Ответы (2)


Примечание. Вероятно, вам следует просто использовать Client SDK для регистрации, так как он обрабатывает все это в фоновом режиме, автоматически присваивая каждому устройству уникальный идентификатор. Вы не должны исследовать это, если не знаете, что делаете. На самом деле нет причин пытаться вручную установить идентификатор устройства.

Когда вы регистрируете устройство для службы push-уведомлений, вы устанавливаете эти значения в теле запроса POST. При успешном вызове он вернет эти значения в ответе. Я сделаю демонстрацию этого позже в почте.

зарегистрироваться

Вы также можете получить список регистраций устройств для службы push-уведомлений. получить устройства

Вы можете использовать этот deviceId для получения подробной информации об устройстве, отправки определенного push-уведомления на это устройство, подписки его на тег и отправки push-уведомлений на эти устройства и т. д.

Документация по Swagger здесь.


Что касается этих значений, вы можете указать в них все, что захотите, при регистрации. Как правило, эти значения автоматически задаются клиентским SDK Bluemix Mobile для Android/iOS при вызове регистрации. Однако вы можете сделать это вручную с помощью клиента REST.

Например:

Здесь я регистрирую устройство:

регистрация

Он успешно зарегистрирован: успешный ответ

Вот что я получаю, если запрашиваю у службы push-уведомлений информацию о моих зарегистрированных устройствах (для "deviceId": "arandomdeviceid"):

запрос

Android BMS Core Client SDK устанавливает этот deviceId, используя уникальный UUID устройства и хешируя его с помощью MD5.

Дополнительную информацию об этом можно найти здесь.

person joe    schedule 08.07.2016
comment
Я хочу использовать JS-функцию MFPPush.register({}, success, false) для регистрации устройства. Могу ли я передать информацию о своем устройстве, идентификаторе пользователя внутри {}. Если да, мне нужен образец JSON. - person anamica; 08.07.2016
comment
Client SDK — это просто оболочка для REST API. Он не поддерживает возможность установки этих параметров из SDK. Однако вы можете сделать запрос REST из своего приложения, чтобы получить желаемую функциональность. - person joe; 08.07.2016
comment
Кстати, есть ли причина, по которой вам нужен этот функционал? Я думаю, вы можете причинить себе больше проблем, чем вам нужно. - person joe; 08.07.2016
comment
Я думал, что использовать Client SDK гораздо проще, чем понимать REST API и обеспечивать передачу всей информации, такой как appSecret, идентификатор приложения и т. д. Я не вижу смысла иметь Client SDK, если я не могу передать эту информацию. Я понимаю, что есть простой вызов, если кому-то не нужно передавать какую-либо информацию, но он должен гарантировать, что он охватывает все, что можно сделать с помощью REST. В этом смысл обертки, скрывающей сложность от конечного пользователя. Это похоже на полувыпеченную работу. Надеюсь, что разработчики Client SDK увидят этот пост и примут необходимые меры. Спасибо - person anamica; 09.07.2016
comment
Client SDK включает в себя весь необходимый код для регистрации, получения push-уведомлений, получения тегов, подписки на теги и т. д. То, что вы, кажется, ищете здесь, — это расширенное, сложное поведение, абстрагированное от разработчика, глубоко в Core SDK. . Вы можете добиться этого расширенного поведения, используя простой вызов REST, но я не могу придумать прецедент, почему разработчик захочет вручную установить уникальный deviceId (поэтому его нет в спецификации Client SDK) . - person joe; 09.07.2016
comment
Если вы дадите мне знать, почему, по вашему мнению, это должно быть включено (например, ваш вариант использования), мы можем обсудить с разработчиками добавление этого в спецификацию. - person joe; 09.07.2016
comment
Мой сценарий предназначен для пользователей, которые используют один и тот же идентификатор на нескольких устройствах и хотят получать уведомления на всех устройствах. Детали: Регистрация осуществляется с помощью моего клиентского приложения Cordova (сейчас только для Android). Затем пользователь совершает некоторые транзакции с помощью приложения. Серверный процесс после завершения транзакции отправляет уведомление этому пользователю. У пользователя может быть несколько устройств с приложением (зарегистрированных с одним и тем же идентификатором пользователя), и уведомление должно быть отправлено на все устройства. Я хочу использовать Client SDK для регистрации, а серверный процесс будет использовать REST API для отправки уведомления. - person anamica; 10.07.2016
comment
Для меня важнее сохранить userId и отправить уведомление на его основе. Меня не волнует deviceId. - person anamica; 10.07.2016
comment
Я поговорю с разработчиками SDK о ваших отзывах и вариантах использования. - person joe; 11.07.2016
comment
Кроме того, я бы порекомендовал ознакомиться с тегами и подпиской на теги, потому что кажется, что это может быть решением вашей проблемы. Вы можете создать тег и подписать устройства на этот тег. Когда вы отправляете push-уведомление на этот тег, он оповещает все устройства, на которые он подписан. - person joe; 11.07.2016
comment
Основываясь на вашем предложении, если я зарегистрирую устройство с помощью REST API, как я получу идентификатор устройства и токен, которые автоматически генерируются устройством Android? Пока я не получу ответ на вышеуказанный вопрос и обновленный клиентский SDK, который упростит мне задачу, вот обходной путь, который я использую: 1. Зарегистрируйте устройство с помощью MFPPush.register({}, успех, сбой). В сообщении об успехе я получаю идентификатор устройства и токен. Я сохраняю это. 2. Выполните вызов REST API, чтобы обновить регистрацию с помощью уникального идентификатора пользователя. Я использую идентификатор устройства и токен, полученные на первом этапе. - person anamica; 11.07.2016
comment
Вы можете создать тег для каждого пользователя и подписать каждое принадлежащее ему устройство на этот тег. Затем, когда вы отправляете уведомление тегу, он предупредит все устройства для этого пользователя. - person joe; 11.07.2016
comment
Вы можете зарегистрироваться и подписаться на теги с помощью клиентского SDK. - person joe; 11.07.2016
comment
Да, это может быть обходным путем, но подумайте о добавлении тега для каждого пользователя, и если есть миллион пользователей ... вы можете получить столько тегов. Не уверен, что тег предназначен для такой цели - person anamica; 11.07.2016
comment
Было бы здорово, если бы были сделаны следующие улучшения. (a) Разрешить передачу параметра userId вместе с регистрацией MFPPush, например MFPPush.register({userId: AUniqueUserId}, успех, сбой) (b) Добавить дополнительный параметр в целевые идентификаторы пользователей (массив). Внутри этот вызов будет искать все идентификаторы устройств для каждого идентификатора пользователя и отправлять уведомление. Спасибо за вашу помощь и потраченное время - person anamica; 11.07.2016

@anamica (a) Разрешить передачу параметра userId вместе с регистрацией MFPPush, например MFPPush.register({"userId": "AUniqueUserId"}, успех, сбой) (b) Добавить дополнительный параметр в целевой "userIds" (массив ). Это усовершенствование было сделано, вы можете попробовать, обновив последнюю версию SDK.

person pradeep sg    schedule 14.04.2017