react-native: push-уведомления + синтаксический анализ
В настоящее время я работаю над небольшим проектом приложения, чтобы изучить и опробовать react-native на iOS. У меня есть некоторый опыт работы с синтаксическим анализом (parse.com) и хотел бы integreate parse в новом приложении. В настоящее время у меня нет проблем с включением parse js в react-native. Я могу войти в систему с помощью учетных записей и т. д. Теперь мне нужно отправить push-уведомления определенному числу пользователей (не всем пользователям).
Чего я не понимаю, так это как push-уведомления должны работать с react-native и parse. Обычно, Я подключил бы установку устройства с идентификатором пользователя, а затем послал бы толчок определенному числу пользователей (что означает устройства с соответствующей установкой). Руководство react-native (https://facebook.github.io/react-native/docs/pushnotificationios.html#content ) не упоминает ничего подобного. И хотя он дает руководство по синтаксическому анализу в качестве ссылки, я не вижу, как я должен быть в состоянии отправить толчки через синтаксический анализ. Руководство оставляет много информации, чтобы быть слишком нужные. До чего же на какой источник подписываются эти "слушатели"? С какого сервера я буду отправлять уведомления и т.д.?
Как я понимаю, parse js не может прочитать текущую установку. Я тоже не решаюсь добавить в проект Parse iOS. Это кажется неестественным и не должно быть обязательным, хотя это позволит мне прочитать текущую установку. (но все же parse js не может зарегистрировать эту установку, чтобы подписаться на push-уведомления).
В этот момент я чувствую, что немного потерялся. Эта часть информации (https://news.ycombinator.com/item?id=9271687 ) говорит мне, что это должно быть возможно каким-то образом. Я просто не могу понять, как : (
Надеюсь, что кто-то может помочь мне с этим. Некоторые советы были бы по-настоящему ценны.
3 ответов:
EDIT : react-native теперь реализует это поведение по умолчанию. Интересной частью является прослушиватель событий для события register, который теперь возвращает маркер устройства. Процедура теперь довольно прямолинейна. Просто взгляните на docs Также проверьте ответ JWindey. В них есть некоторые очень важные моменты, которые необходимы, чтобы действительно вызвать события.
Через некоторое время и много пробных вещей, мы пришли к ответу сегодня. Это наше решение. и, кажется, это работает довольно хорошо.
Мы используем следующие ресурсы:
- react-native
- parse-js
- Parse REST API
- реагировать родной пульт-поштовх (https://github.com/darylrowland/react-native-remote-push)
Следуйте руководству по синтаксическому анализу для push-уведомлений (https://parse.com/tutorials/ios-push-notifications ) и правильно настроить все (профили, сертификаты и т. д.). Использование react-native-remote-push компонент позже, вам не нужно следовать шагам 5 и 6.
Теперь добавьте react-native-remote-push к вашему проекту. Нам пришлось внести некоторые незначительные изменения в код (в основном это касается устаревшего кода objC), но это может зависеть от вашего собственного проекта.
Наш проект имеет своего рода "стартовую страницу", которая отображается каждый раз, когда приложение открывается. На этой странице мы имеем дело с разрешениями на push-уведомления, а также с регистрацией маркера устройства и прослушиватель для push-уведомлений. Наша цель-имитировать то же поведение, которое мы получили бы с помощью parse iOS SDK.
Сначала нам нужно зарегистрировать устройство и подписаться на push-канал. react-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-это необходимый компонент из реагировать родной пульт-пуш и registerInstallation-это функция, содержащая остальные вызова API.
/** * 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, версию приложения, версию синтаксического анализа и т. д., так же, как вы привыкли из iOS SDK. У нас есть только базовый пример, работающий прямо сейчас, но он должен быть легко расширяется на этой основе. Этот шаг был очень важен для нас, потому что нам нужно связать каждую установку с определенным пользователем.
Теперь вы должны получать push-уведомления. Вы можете справиться с ними в функции "receiveRemoteNotification", который выступает в качестве слушателя. Базовая функция предусмотрена на веб-сайте компонента react-native-remote-push.
Я надеюсь, что смогу поделиться некоторыми соображениями по этой теме. Если я должен более подробно остановиться на некоторых деталях, я буду с удовольствием добавлю еще немного информации.
Я провел небольшое исследование с комбинацией Parse + react-native, и она работает.
Вы должны добавить Parse SDK (следуйте руководству) в свой проект и связать все необходимые библиотеки.
Не забудьте добавить шаги по пункту 5: https://parse.com/tutorials/ios-push-notifications .
Затем добавьте RCTPushNotificationManager.h + m (от react-native / Libraries) к вашему проекту. После этого добавьте в AppDelegate следующее.м:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { [[NSNotificationCenter defaultCenter] postNotificationName:@"RemoteNotificationReceived" object:self userInfo:userInfo]; }Что должны делать это.
У официального PushNotificationIOS есть событие
register, из которого мы можем получить токен. Таким образом, имея REST API @MrMuetze, я мог бы установить устройство для разбора.PushNotificationIOS.addEventListener('register', function(token){ registerInstallation({ "deviceType": "ios", "deviceToken": token, "channels": ["global"] }) });
Comments