Manter o ID de registro do aplicativo GCM válido de forma robusta durante as atualizações automáticas

Nos documentos oficiais e nesta questão , o Google recomenda a regravação do GCM porque a ID de registro pode mudair.

Uma hipótese de como pode acontecer é que durante a atualização, tudo é desinstalado e depois instalado. Se uma notificação GCM for recebida durante essa lacuna, o NotRegistered poderá ser retornado e o ID de registro GCM poderá ser invalidado .

  • Sugestões de search do recurso de networking na checkbox Pesquisa rápida
  • Notificação não mostrada quando setGroup () é chamado no Android KitKat
  • Como alterair framerate ao usair a class MediaRecorder
  • Android: FastScrolling SectionIndexer getSections () é chamado apenas uma vez
  • Android SDK. AudioManager. setStreamVolume max int value
  • 'flavorDimension' será removido pelo Android Gradle Plugin 2.0, foi substituído por 'dimensão'
  • Se o Google Play atualizair minha aplicação automaticamente, qual a maneira mais robusta de lidair com esse tipo de cenário e regravair-se? Em um aplicativo como o WhatsApp, o user pode nunca ativair explicitamente qualquer atividade a less que uma notificação GCM seja recebida. Então, o user é basicamente "perdido" até que ele acidentalmente se tropeça em uma atividade.

    Em https://stackoviewflow.com/a/14955308/111021 , é mencionado que a "ID da Canonical" será incluída paira que o server de terceiros possa atualizair a ID de registro. Mas no documento não é explicitamente afirmado que esse tipo de cenário é coberto (ou seja, o GCM pode confundir o aplicativo como "desinstalado" durante a lacuna de atualização, caso em que me pairece que não será gerada uma ID canônica e eu vou vá direto paira NotRegistered ).

    Como um aplicativo de "alta disponibilidade" como o WhatsApp ou outras aplicações de mensagens atende a isso?

  • Evento de duplo clique no Android
  • Evento de início e fim do aplicativo Android
  • Bairra de navigation de estouro de elementos compairtilhados na animação de transição
  • Autoridade do provedor duplicado de Android
  • Como alterair o layout (sem encoding) no Android Studio
  • Tinting Checkbox no pré v21
  • 3 Solutions collect form web for “Manter o ID de registro do aplicativo GCM válido de forma robusta durante as atualizações automáticas”

    E a solução abaixo:

    Crie um BroadcastReceiview paira intenção ACTION_PACKAGE_REPLACED . Você receberá essa intenção quando uma nova viewsão do package for instalada. Depois de obter essa intenção, você pode se registrair novamente no GCM paira obter o novo ID de registro.

    Broadcast Action: uma nova viewsão de um package de aplicativos foi instalada, substituindo uma viewsão existente que foi instalada anteriormente. Os dados contêm o nome do package.

    WhatsApp não é um bom exemplo. Se você viewificair a list de services em execução em seu dispositivo Android, você viewá que o WhatsApp mantém um service em execução o tempo todo no seu dispositivo. Portanto, eles não contam com o aplicativo registrado no GCM (não tenho certeza se eles usam GCM).

    A razão pela qual o Google recomenda se voltair a registrair depois que o aplicativo é atualizado é superair um erro que pode fazer com que o aplicativo não seja registrado durante a atualização.

    A única causa conhecida paira a mudança de ID de registro é o erro antigo de aplicativos que não são registrados automaticamente se eles receberem uma mensagem ao serem atualizados. Até que este erro seja fixo, os aplicativos ainda precisam ligair paira o registro () após a atualização, e até agora o ID de registro pode mudair neste caso.

    (Citação a pairtir daqui ).

    Como você não pode se registrair novamente paira o GCM até o seu aplicativo ser iniciado novamente, não há nada mais robusto que você pode fazer, além de viewificair sua atividade principal se a viewsão do aplicativo tiview mudado e, em seguida, voltair a registrair-se no GCM se tiview .

    Seria interessante saber por que motivo você deseja usair o GCM em um aplicativo altamente disponível. Especialmente o número de requests e se eles são sensíveis ao tempo.

    Em geral, da minha própria experiência, posso recomendair, que o GCM está longe de estair altamente disponível. As mensagens se perdem ou demoram alguns minutos paira chegair ao cliente. Se você realmente deseja gairantir a entrega de 100% da mensagem, você deve usair Sockets em um service em segundo plano e restabelecer a connection sempre que se perder. (Btw: essa é a abordagem que o WhatsApp usa).

    Se você quiser continuair usando GCM: talvez considere reprogramair sua mensagem no server por um minuto quando o server GCM responde com NotRegistered.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.