Подтвердить что ты не робот

Apple Push Notification Collapse Key Equivalent

При использовании push-уведомлений Google я могу указать значение collapse_key, чтобы устройство не получало несколько уведомлений о том же collapse_key. Имеет ли APNS аналогичную функцию или кто-нибудь знает способ эмуляции этой функции?

4b9b3361

Ответ 1

В iOS такой функции нет. Однако, поскольку push-уведомления отправляются сервером, который находится под вашим контролем, вы можете отслеживать, какие уведомления вы отправили на конкретное устройство, и решить, отправлять или не отправлять новые. Другими словами, вы помещаете логику в код сервера, а не код приложения iOS.

Ответ 2

Начиная с iOS 10 и используя API APNS HTTP/2.0, вы можете указать заголовок apns-collapse-id и обработать логику сворачивания в своем приложении.

Свернутые уведомления будут отображаться как одно уведомление на устройстве, которое будет обновлять новые данные. Каждый раз, когда уведомление обновляется, оно помещается в верхнюю часть ваших непрочитанных уведомлений.

Описание apns-collapse-id взято из https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html:

Несколько уведомлений с одинаковым идентификатором коллапса отображаются на пользователь как одно уведомление. Значение не должно превышать 64 байт. Для получения дополнительной информации см. Раздел "Качество обслуживания", Сохранение и переадресация, а также объединенные уведомления.

и https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/APNSOverview.html#//apple_ref/doc/uid/TP40008194-CH8-SW1:

Когда устройство подключено к сети, все отправленные вами уведомления отправляются и доступно пользователю. Однако вы можете избежать дублирования уведомлений путем использования идентификатора коллапса для нескольких, идентичные уведомления. Заголовок заголовка запроса APN для краха идентификатор - apns-collapse-id и определен в таблице 6-2.

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

Ответ 3

В iOS 10 появился новый "apns-collapse-id", который выглядит так, как будто он справится с такой необходимостью. Если у вас есть учетная запись разработчика Apple, вы можете посмотреть видеозапись сеанса WWDC 2016 (707 intro video https://developer.apple.com/videos/play/wwdc2016/707/).

Ответ 4

Если APN пытается отправить уведомление, но устройство отключено, уведомление хранится в течение ограниченного периода времени и доставляется к устройству, когда оно станет доступным.

Сохранено только одно последнее уведомление для определенного приложения. Если несколько уведомлений отправляются, когда устройство находится в автономном режиме, каждый новый уведомление заставляет исключить предварительное уведомление. Эта поведение сохранения только самого нового уведомления называется объединение уведомлений.

https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html

Поэтому нет необходимости в collapse_key в iOS.

FYI, collapse_key полезен только тогда, когда устройство отключено/неактивно:

Этот параметр идентифицирует группу сообщений (например, с collapse_key: "Доступны обновления" ), которые могут быть свернуты, так что только последнее сообщение отправляется, когда доставка может быть возобновлена. Это для избегать отправки слишком большого количества сообщений, если устройство возвращается в сеть или становится активным (см. delay_while_idle).

https://developers.google.com/cloud-messaging/server-ref#downstream

UPDATE:

Для iOS и Android (с помощью collapse_key) , если устройство находится в автономном режиме (т.е. удаленный сервер Apple/Google не может его достичь), удаленный сервер перезаписывает любое предыдущее уведомление и сохраняет только последний.

Если устройство находится в режиме онлайн, я думаю, вам решать, что вы хотите, с полученным уведомлением. По крайней мере, в Android вы можете решить, хотите ли вы "свалить вещи", хотите ли вы перезаписать любое предыдущее уведомление в области уведомлений или хотите ли вы перезаписать любое предыдущее уведомление того же типа.

NotificationManager notificationManager = ...;
String appName = ...;
NotificationCompat.Builder builder = ...
// Always use the same id, so only the last notification will be displayed in the notification area.
int notId = 0;
// Always use a different id, so all notifications will pile up in the notification area
notId = new Random().nextInt(100000);
// Uses the type of notification as id, so you'll only have up to one notification per type
// in the notification area. It like using collapse_key, but on the app itself.
// That type should should be some additional data in the notification you sent.
notId = notificationType;
Notification notification = builder.build();
notificationManager.notify(appName, notId, notification);

Ответ 5

В нашем случае нам нужно, чтобы наши пользователи вошли в систему, чтобы получать специальные push-уведомления, что было сложно сделать при регулярном нажатии. Вместо этого мы отправляем уведомления об обновлении фона, и если пользователь вошел в систему, мы планируем их как локальные уведомления. К сожалению, в этом случае не проходит apns-collapse-id.

Однако для локальных уведомлений есть эквивалент: когда вы создаете свой UNNotificationRequest, вы можете просто установить параметр identifier на любой вы проходили как apns-collapse-id с тем же эффектом.

Есть примеры примеров и демонстраций кода для управления отправленными уведомлениями в этот разговор в WWDC - ключевой раздел - с 18:00 до 21: 00.