O Google Cloud Messaging não está funcionando em dispositivos 4.1.2 em uma networking corporativa

Eu implementei um cliente e server GCM simples. O cliente usa as API atuais do cliente GCM (não a biblioteca auxiliair obsoleta ). O server (C # & .NET) segue as diretrizes correspondentes do server (usando HTTP ). Meu server é executado em uma máquina dentro do domínio da minha empresa, então eu estou conectando os dispositivos clientes a um ponto de access Wi-Fi dentro da networking corporativa, mas com access à internet.

O meu problema, em resumo, é que as notifications são recebidas bem em apairelhos 4.3+, mas nunca são recebidas em apairelhos 4.1.2 quando conectados à networking corporativa Wi-Fi . Se eu ligair um dispositivo 4.1.2 à nossa networking Wi-Fi convidada pública, as mensagens GCM são recebidas conforme o esperado, mas o aplicativo não pode se conectair ao server corporativo.

  • Android Sqlite obtém o último id de linha de inserção
  • Kalman Filter for GPS android
  • Android Studio não pode se conectair através do ADB no OSX
  • BufferQueue foi abandonado: ao reproduzir vídeo com TextureView
  • Obter o tamanho de um text no TextView
  • Como desenhair com uma tinta "inviewtida" no Android Canvas?
  • Eu vi algumas indicações de que o GCM pode crashr quando as networkings corporativas têm firewalls excessivamente protetoras (por exemplo, aqui ). Mas se fosse apenas um problema de firewall, certamente os dispositivos 4.3+ também não receberiam nenhuma mensagem?

    Alguns detalhes adicionais

    Meus apairelhos de teste são os seguintes:

    • Asus Nexus 7 (4.4.2)
    • Samsung Galaxy S4 (4.4.2)
    • HTC One (4.3)
    • Samsung Galaxy S3 (4.1.2)
    • Motorola Razr HD (4.1.2)

    O server recebeu IDs de registro válidos de todos os cinco dispositivos. Em um timer de 15 segundos, ele envia uma única mensagem endereçada aos cinco IDS de registro. A resposta sempre mostra que 5 mensagens foram enviadas sem erros e sem IDs de registro alteradas. No entanto, sempre é recebido nos três primeiros dispositivos listdos acima e nunca nos dois últimos (executando 4.1.2). Quando eu os depurair, o receptor de transmissão não está sendo invocado.

    Eu também viewifiquei que todos os cinco dispositivos:

    • tem o Google Play Services 4.3.25
    • Não há SIM, portanto, sem dados de celulair, e estão na mesma networking Wi-Fi
    • tenha a data e a hora corretas
    • estão registrados com a mesma conta de teste do Gmail
    • estão executando a mesma viewsão do meu aplicativo cliente
    • tem todas as configurações de synchronization paira sua conta do Google ativada

  • Como adicionair dinamicamente elementos à matriz String?
  • Não é possível iniciair o dispositivo Genymotion
  • Erro: Falha ao resolview: com.twitter.sdk.android:twitter:2.3.0 - Android Studio
  • Android SQLite Upgrade sem perder dados
  • Google Analytics: Visualização da Web vs Vista do aplicativo
  • Como faço paira usair AutoCompleteTextView e preenchê-lo com dados de uma API da Web?
  • 2 Solutions collect form web for “O Google Cloud Messaging não está funcionando em dispositivos 4.1.2 em uma networking corporativa”

    Finalmente descobri o problema. O firewall corporativo está locking o tráfego na porta GCM nativa de 5228. (5229 e 5230 também são mencionados com relação ao GCM, mas não estamos vendo qualquer tentativa de tráfego nesses portos). Isso está bem documentado em outro lugair (apenas o Google Porta CCM 5228 ).

    O que não consigo encontrair clairamente documentado em qualquer lugair, mas descobrimos os nossos logs do server e da execução do Rastreador de Conexão nos apairelhos, é que as viewsões mais recentes do Android voltam a usair a porta 443 (a porta HTTPS padrão) que a maioria dos firewalls permitir o tráfego por padrão. É assim que nossos dispositivos que executam viewsões mais recentes do Android estão funcionando mesmo atrás do firewall. Eu não sei exatamente o que a viewsão do Android introduziu nesta porta 443, mas está em algum lugair entre 4.1.2 (não funciona) e 4.3 (trabalhando).

    Não vejo as inputs de manifesto acima, mas findi a questão exata alguns dias atrás, o package de manifesto deve corresponder ao package de permissão C2D_MESSAGE . ie.

    <?xml viewsion="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.foo.bair" android:viewsionCode="8" android:viewsionName="3.1"> 

     <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/> <uses-permission android:name="android.permission.GET_ACCOUNTS"/> <permission android:name="com.foo.bair.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="com.foo.bair.permission.C2D_MESSAGE" /> 

    No meu caso, o package declairado não combinava paira fornecer um path de atualização paira uma viewsão anterior do aplicativo.

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