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

В настоящее время я работаю над небольшим проектом приложений, чтобы узнать и попробовать реагировать на ядро ​​iOS. У меня есть некоторый опыт работы с parse (parse.com) и я бы хотел интегрировать синтаксический анализ в новом приложении. В настоящее время у меня нет никаких проблем, включая parse js для реагирования. Я могу войти в систему со счетами и т.д. Теперь мне нужно отправить push-уведомления определенному числу пользователей (не всех пользователей).

Что я не понимаю, так это то, как push-уведомления должны работать с реакцией-native и parse. Обычно я подключаю установку устройства с идентификатором пользователя, а затем отправляю push на определенное количество пользователей (что означает устройства с соответствующей установкой). Направляющий ответ (https://facebook.github.io/react-native/docs/pushnotificationios.html#content) не упоминает ничего подобного. И хотя он дает руководство по синтаксическому анализу в качестве ссылки, я не вижу, как я могу отправлять push через синтаксический анализ. Гид оставляет желать много информации. К какому источнику подписываются эти "Слушатели"? С какого сервера я собираюсь отправлять уведомления и т.д.

Как я понимаю, parse js не может прочитать текущую установку. Я не решаюсь добавить Parse iOS в проект. Это кажется неестественным и не должно быть обязательной задачей, хотя это позволит мне прочитать текущую установку. (но все же parse js не может зарегистрировать эту установку, чтобы подписаться на push-уведомления).

В этот момент я чувствую себя немного потерянным. Эта информация (https://news.ycombinator.com/item?id=9271687) говорит мне, что это должно быть возможно как-то. Я просто не могу понять, как: (

Надеюсь, кто-то может мне помочь. Некоторые советы будут по достоинству оценены.

Ответ 1

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

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

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

Следуйте инструкциям синтаксиса для 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", которая действует как слушатель. Основная функция предоставляется на веб-сайте компонента "реагировать на нативный".

Надеюсь, я мог бы поделиться некоторыми сведениями по этой теме. Если я буду подробно разбираться в некоторых деталях, я с удовольствием добавлю дополнительную информацию.

Ответ 2

Я провел некоторое расследование с комбинацией Parse + react-native и работаю.

Вы должны добавить Parse SDK (следуйте инструкциям) в свой проект и связать все необходимые библиотеки.

Не забудьте добавить шаги в точке 5: https://parse.com/tutorials/ios-push-notifications.

Затем добавьте в проект проект RCTPushNotificationManager.h + m (from react-native/Libraries). После этого добавьте в AppDelegate.m следующее:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
[[NSNotificationCenter defaultCenter] postNotificationName:@"RemoteNotificationReceived"
                                                    object:self
                                                  userInfo:userInfo];
}

Это должно сделать это.

Ответ 3

У официального PushNotificationIOS есть событие register, из которого мы можем получить токен. Таким образом, имея API @MrMuetze REST, я мог бы установить это устройство в Parse.

PushNotificationIOS.addEventListener('register', function(token){
 registerInstallation({
   "deviceType": "ios",
   "deviceToken": token,
   "channels": ["global"]
 })
});