Ответ 1
EDIT: response-native реализует это поведение по умолчанию. Интересной частью является прослушиватель событий для события register, который теперь возвращает токен устройства. Процедура довольно прямо сейчас. Просто посмотрите docs Также проверьте ответ JWindey. Есть некоторые очень важные моменты в них, которые необходимы для фактического запуска событий.
Через какое-то время и много попыток, мы пришли сегодня к ответу. Это наше решение, и, похоже, оно работает очень хорошо.
Мы используем следующие ресурсы:
- реагируют родной
- синтаксический анализ-JS
- API Parse Rest
- response-native-remote-push (https://github.com/darylrowland/react-native-remote-push)
Следуйте инструкциям синтаксиса для push-уведомлений (https://parse.com/tutorials/ios-push-notifications) и правильно настройте все настройки (профили, сертификаты и т.д.). В дальнейшем с помощью компонента "реакция-на-на-удаленный-push" вам не нужно следовать шагам 5 и 6.
Теперь добавьте в проект проект action-native-remote-push-push. Нам пришлось внести некоторые незначительные корректировки в код (в основном, с использованием старого кода objC), но это может зависеть от вашего собственного проекта.
В нашем проекте есть своего рода "стартовая страница", которая отображается каждый раз, когда приложение открывается. На этой странице мы имеем дело с разрешениями push-уведомлений, а также с регистрацией токена устройства и прослушивателя для push-уведомлений. Наша цель - подражать тому же поведению, которое мы получим с помощью синтаксического анализа iOS SDK.
Нам нужно сначала зарегистрировать устройство и подписаться на push-канал. response-native-remote-push позволяет нам обрабатывать разрешения и получать токен устройства. Затем мы перейдем к использованию этого токена устройства, чтобы зарегистрировать эту установку через Rest API. Этот код является частью нашего вызова componentDidMount().
var PushManager = require('./RemotePushIOS');
var registerInstallation = require('./Installation');
componentDidMount() {
PushManager.requestPermissions(function(err, data) {
if (err) {
console.log("Could not register for push");
} else {
registerInstallation({
"deviceType": "ios",
"deviceToken": data.token,
"channels": ["global"]
});
}
});
PushManager.setListenerForNotifications(this.receiveRemoteNotification);
}
PushManager - это необходимый компонент из реакции-native-remote-push и registerInstallation - это функция, содержащая вызов API Rest.
/**
* registers an installation
* data should look like the following:
* {
* "deviceType": "ios", // or "android"
* // if android is targeted set
* // "pushType": "gcm",
* // "GCMSenderId": "56712320625545", // whatever the later means
* "deviceToken": "29e32a686fd09d053e1616cb48",
* "channels": [
* ""
* ]
* };
* for more information visit:
* https://www.parse.com/docs/rest#installations-uploading
*/
var registerInstallation = function(data) {
var url = "https://api.parse.com";
url += "/1/installations";
fetch(url, {
method: 'post',
headers: {
'Accept': 'application/json',
'X-Parse-Application-Id': PARSE_APP_ID,
'X-Parse-REST-API-Key': PARSE_REST_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
})
.then(processStatus)
.then(parseJson)
.catch(error);
};
module.exports = registerInstallation;
"processStatus", "parseJson" и "error" - это лишь некоторые небольшие функции, которые обрабатывают результат вызова API. При необходимости я могу предоставить более подробную информацию. Эта функция позволяет нам добавлять много информации через объект "данные", такой как userid, версия приложения, версия синтаксиса и т.д., Так же, как вы привыкли к SDK iOS. На данный момент мы имеем только базовый пример, но на этой основе это должно быть легко распространяться. Этот шаг был очень важен для нас, потому что нам нужно связать каждую установку с определенным пользователем.
Теперь вы сможете получать push-уведомления. Вы можете обрабатывать их в функции "receiveRemoteNotification", которая действует как слушатель. Основная функция предоставляется на веб-сайте компонента "реагировать на нативный".
Надеюсь, я мог бы поделиться некоторыми сведениями по этой теме. Если я буду подробно разбираться в некоторых деталях, я с удовольствием добавлю дополнительную информацию.