iOS Twilio программируемый чат Push-уведомления - PullRequest
0 голосов
/ 30 апреля 2018

Я интегрировал программируемый чат Twilio, но у меня были некоторые проблемы с push-уведомлениями, которые я пытаюсь решить.

Я смотрю на свой код по сравнению с примером, представленным на https://www.twilio.com/docs/chat/ios/push-notifications-ios

Первое, что я заметил, это то, что в разделе User Notification Setttings (кроме лишних t в названии раздела) используется устаревший метод [self.chatClient registerWithToken:nil]; из V1.0. В текущей документации для V 2.2.2 у нас есть - (void) registerWithNotificationToken: (ненулевое NSData *) завершение токена: (обнуляемое TCHCompletion) завершение , которое указывает nonnull NSData* для параметра токена. Таким образом, мы не можем пройти ноль больше. Есть ли что-то, что мы сейчас должны сделать для дела if(notificationSettings.types == UIUserNotificationTypeNone) в - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings нашего делегата приложения? (пример приведен в разделе учебника, упомянутом выше). Сейчас я просто пропускаю этот шаг и проверяю, что для моего свойства updatedPushToken установлено значение nil.

Мне также интересно, что на самом деле делает - (void) handleNotification: (ненулевой NSDictionary *) завершение уведомления: (обнуляемое TCHCompletion) завершение метод TwilioChatClient на самом деле делает. Я вижу, что у делегата есть 5 различных способов уведомления. Этот handleNotification метод просто вызывает соответствующий метод делегата? Я сам не использовал этот метод, я просто показываю предупреждение с сообщением об уведомлении прямо сейчас, поэтому мне интересно, есть ли дополнительные преимущества, которые я пропускаю, или даже потенциальные ошибки, которые я внедряю, не используя обработчик TwilioChatClient.

Последнее и самое важное, что меня интересует, это то, что не затронуто в руководстве, - как обрабатывать регистрацию push-уведомлений, когда пользователь вышел из системы и вошел позже. deviceToken, возвращаемое из - (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken, предназначено для хранения где-то с большей стойкостью, чем свойство синглтона? Могу ли я получить его в другом месте, либо с помощью Twilio, либо с помощью метода iOS, который мне неизвестен? Кажется, что когда я выхожу из системы, я не могу снова получать уведомления, когда они входят в систему другому или даже одному и тому же пользователю. Я вижу, что существует метод deregisterWithNotificationToken: завершение: , но поскольку для него требуется ненулевой токен, я могу вызывать его только на основе учебника, если мое приложение не было закрыто. Какой рекомендуемый способ повесить на этот токен? NSUserDefaults? Где-нибудь в базе данных моего сервера?

Edit: У меня есть другой вопрос, на самом деле. Если я сниму флажок чтения состояния, а затем повторно проверю его в конфигурации экземпляра чата, будет ли это сбрасывать количество непрочитанных каналов у всех? У меня была неправильная настройка горизонта потребления / статуса чтения, и у меня также есть много каналов, скрытых от пользователей, даже если они в них ... так что, с включенным счетчиком значков, пользователи, вероятно, видят очень большие цифры время, когда они получат одно сообщение, и не смогут полностью уменьшить это число до 0, даже если они откроют все каналы, которые они в настоящее время могут просматривать. Я бы предпочел просто сбросить этот номер. Как упомянуто в моих комментариях, мне не нравится, что у меня есть только один вариант: значок уведомления или значок уведомления, в котором явно указано количество каналов, на которых есть непрочитанные сообщения ... Я бы предпочел вариант просто увеличить значок, и За исключением этого, уведомление, которое не включает в себя конкретный номер. Я хочу, чтобы люди увидели, что у них есть чаты, так как это очень важно, но я не хочу, чтобы эти большие цифры отображались, и эти непрочитанные сообщения не оставались актуальными навсегда. Актуально только новые непрочитанные сообщения.

1 Ответ

0 голосов
/ 01 мая 2018

Я работаю в команде программируемого чата iOS SDK и надеюсь помочь с некоторыми из ваших вопросов выше.

Ссылки на registerWithToken:, а также инструкция для вызова его с параметром nil, когда токен отсутствует / известен, оба устарели, как вы заметили. Мы получим обновленную документацию и учебное пособие, чтобы отразить это - спасибо!

Сегодня handleNotification:completion: необязательно. Его цель - проанализировать часть userInfo полезной нагрузки и предоставить упомянутые вами обратные вызовы, чтобы помочь вашему пользователю узнать о произошедших событиях. Не вредно пропускать этот шаг сегодня, но в будущем, вероятно, эти обратные вызовы будут использоваться для обеспечения большей обратной связи о доставке уведомлений внутри программируемого чата, поэтому вы можете захотеть вернуться к реализации этого в будущем.

Когда ваши пользователи выходят из системы, рекомендуется вызывать метод deregisterWithNotificationToken:completion:, чтобы обеспечить их конфиденциальность. Если вы не отмените регистрацию токена, связанного с его идентификацией, они продолжат получать уведомления для этого идентификатора, даже если впоследствии они будут использовать токен доступа на этом устройстве с другим идентификатором в будущем. Механизмы для управления привязками уведомлений программно через наш REST API включены в нашу дорожную карту, но у меня нет даты выпуска, чтобы поделиться в это время.

Как упомянуто в документации push-уведомлений Apple, полезно не кэшировать токен устройства и не предполагать, что токены push-устройства никогда не изменятся, так как этот токен может измениться при будущих регистрациях. Точно так же рекомендуется передавать токен, данный Apple, в Programmable Chat всякий раз, когда вы получаете токен устройства от Apple, чтобы убедиться, что у нас есть самый современный токен для доступа к вашему пользовательскому устройству.

Счетчик значков, передаваемый APNS, сообщает количество каналов с непрочитанными сообщениями для данного пользователя. Есть несколько причин, которые приходят на ум, почему вы видите устаревший результат здесь. В своем клиенте вы вызываете setLastConsumedMessageIndex:completion: на TCHMessages (или один из связанных методов в том же классе), чтобы обновить непрочитанный статус на бэкэнде? После того, как это будет сделано, вы увидите, что через короткий промежуток времени появилось обновленное сообщение с обновленным количеством значков. Другая возможность, если у вас есть устаревшие привязки для других идентификаторов, которые все еще находятся на канале, с которым вы тестируете, которые не были отключены / не зарегистрированы. Обратите внимание, что пока приложение находится на переднем плане, вы сами отвечаете за обновление количества значков - iOS этого не сделает. Это единственное место, где вы можете убедиться, что звоните handleNotification:completion:, так как мы позвоним, если получим обновление значка. Вы также можете посмотреть на полезную нагрузку и сделать вызов, чтобы обновить количество значков по мере необходимости непосредственно в принимающем делегате в UIApplication. Один из способов проверить это - настроить новый канал и проверить сообщения с ним, обновляя горизонт потребления, когда это необходимо. Вы можете найти больше информации в документации по горизонту потребления . Ниже вы можете найти пример обновления счетчика значков в отклике на метод делегата Programmable Chat:

- (void)chatClient:(TwilioChatClient *)client notificationUpdatedBadgeCount:(NSUInteger)badgeCount {
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:badgeCount];
}

Использование токенов аутентификации Apple вместо сертификатов - это то, что исследует наша команда по уведомлениям, но у нас нет даты, чтобы сообщить, когда поддержка будет отправлена ​​в это время.

Пожалуйста, дайте мне знать, если я могу помочь в дальнейшем или я пропустил любой из ваших вопросов!

Спасибо, Randy

...