Notificación de inserción de Apple Contraer Equivalente de key

Al usar las notifications push de Google, puedo especificar un valor de key de queuepso, por lo que un dispositivo no recibirá múltiples notifications de la misma key de queuepso. ¿APNS tiene una característica similar o alguien conoce una forma de emular esta funcionalidad?

No hay tal característica en iOS. Sin embargo, dado que un server que está bajo su control envía notifications automáticas, puede realizar un seguimiento de las notifications que envió a un dispositivo en particular y decidir si desea enviar o no notifications nuevas. En otras palabras, pones la lógica en tu código de server, no en tu código de la aplicación de iOS.

A partir de iOS 10 y utilizando la API HTTP / 2.0 APNS, puede especificar el apns-collapse-id y manejar la lógica de queuepso en su aplicación.

Las notifications queuepsadas aparecerán como una sola notificación en el dispositivo que se actualiza con nuevos datos. Cada vez que se actualiza una notificación, se envía a la parte superior de las notifications no leídas.

Descripción de apns-collapse-id tomada de https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html :

Múltiples notifications con el mismo identificador de queuepso se muestran al usuario como una única notificación. El valor no debe superar los 64 bytes. Para get más información, consulte Calidad de service, Store-and-Forward y Notificaciones coalescentes.

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

Cuando un dispositivo está en línea, todas las notifications que envía se entregan y están disponibles para el usuario. Sin embargo, puede evitar mostrar notifications duplicadas empleando un identificador de queuepso en múltiples notifications idénticas. La key de encabezado de request de APN para el identificador de queuepso es apns-queuepso-id y se define en la Tabla 6-2.

Por ejemplo, un service de noticias que envía el mismo título dos veces seguidas podría emplear el mismo identificador de queuepso para ambas requestes de notificación de inserción. Los APN se encargarían de fusionar estas requestes en una sola notificación para su entrega a un dispositivo.

Con iOS 10 hay un nuevo "apns-collapse-id" que parece que manejará este tipo de necesidad. Si tiene una count de desarrollador de Apple, puede ver los videos de la session de notificación de WWDC 2016 (video de introducción de 707 https://developer.apple.com/videos/play/wwdc2016/707/ ).

Si los APN intentan enviar una notificación pero el dispositivo está fuera de línea, la notificación se almacena durante un período de time limitado y se entrega al dispositivo cuando esté disponible.

Solo se almacena una notificación reciente para una aplicación en particular . Si se envían múltiples notifications mientras el dispositivo está fuera de línea, cada nueva notificación hace que se descarte la notificación previa. Este comportamiento de mantener solo la notificación más reciente se conoce como notifications coalescentes.

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

Entonces, no hay necesidad de collapse_key en iOS.

FYI, collapse_key solo es útil cuando el dispositivo está desconectado / inactivo:

Este parámetro identifica un grupo de posts (por ejemplo, con collapse_key: "Actualizaciones disponibles") que pueden queuepsarse, de modo que solo se envía el último post cuando se puede reanudar la entrega. Con esto se intenta evitar enviar demasiados posts cuando el dispositivo vuelve a estar en línea o se activa (vea delay_while_idle).

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

ACTUALIZAR:

Tanto para iOS como para Android (usando collapse_key), si el dispositivo está fuera de línea (es decir, el server push de Apple / Google no puede acceder a él), el server push sobrescribe cualquier notificación anterior y solo conserva la última.

Si el dispositivo está en línea , supongo que dependerá de ti hacer lo que quieras con la notificación recibida . Al less en Android, puede decidir si desea "acumular cosas", si desea sobrescribir cualquier notificación previa en el área de notificación o si desea sobrescribir cualquier notificación previa del mismo tipo.

 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's 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);