react-native: push-уведомления + синтаксический анализ

в настоящее время я работаю над небольшим проектом приложения, чтобы узнать и попробовать react-native на iOS. У меня есть некоторый опыт работы с parse (parse.com) и хотел бы integreate 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 ответов


редактировать: react-native реализует это поведение по умолчанию. Интересной частью является прослушиватель событий для события register, которое теперь возвращает токен устройства. Процедура теперь довольно прямолинейна. Просто взгляните на docs также проверьте ответ JWindey. В них есть некоторые очень важные моменты, которые необходимы для фактического запуска событий.

через некоторое время и много попыток, мы пришли с ответом сегодня. Это наше решение, и, похоже, оно работает довольно хорошо.

мы используем следующие ресурсы:

следуйте инструкциям по разбору 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-необходимый компонент из react-native-remote-push, а registerInstallation-функция, содержащая вызов REST 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"]
 })
});