2012-06-21 2 views
5

J'envisage d'utiliser une connexion persistante à un «service de nuage» d'une application Android. Cela fonctionnerait tout le temps dans un service d'arrière-plan (ou quelque chose comme ça).Meilleure pratique pour les connexions mobiles persistantes sur Android?

Je pense utiliser des douilles Web ou XMPP pour garder la connexion, en cherchant essentiellement une connexion légère qui ne videra pas la batterie. Je veux pour être en mesure de pousser les notifications en temps réel à cette connexion, de sorte que l'interrogation périodique n'est pas souhaitée. Je suis au courant de C2DM et d'autres solutions commerciales, mais je cherche à rouler le mien. C'est pourquoi une socket web (ou une autre connexion légère) est ce que j'étudie. Donc, si je vais dans cette direction, quelles sont les meilleures pratiques que je devrais connaître?

Je pense à des choses comme:

  1. comment éviter de décharger la batterie,
  2. Comment faire pour gérer les changements d'adresse IP, etc?
+1

Cela vaut la peine de lire des documents Android: http://developer.android.com/training/efficient-downloads/index.html – pawelzieba

+4

Vous devez diviser ceci en deux questions distinctes, à savoir Android et iOS - les deux sont complètement différents (sur iOS, vous ne pouvez pas simplement avoir un service d'arrière-plan). – Gruntcakes

+0

@MartinH Question mise à jour pour être sur Android seulement. –

Répondre

10

Ceci peut ne pas être la réponse que vous cherchez mais je pense que vous voudrez peut-être repenser votre architecture.

Les choses que vous pouvez attendre d'un plate-forme mobile

  • Votre adresse IP pour changer au hasard
  • Votre connexion Internet physique à perdre au hasard
  • L'OS de décider que vous faites pas quelque chose d'utile et le meurtre votre processus
  • Le type de connexion changeant au hasard (de WIFI 4G 3G à bord) et donc votre adresse IP pour changer

Fondamentalement, votre application doit être capable de gérer une perte de connexion, car il est presque garanti de se produire. Cela étant dit, cela est totalement réalisable en fonction de votre définition du temps réel. Si vous êtes prêt à vérifier en permanence qu'il existe toujours une connexion viable, vous pouvez garder tous les délais jusqu'à la plage des minutes. Mais cela va vider la batterie et il n'y a pas grand chose à faire à ce sujet.

+4

Repenser l'architecture n'est pas une mauvaise réponse :-) C'est le but de la publication de la question, en essayant juste d'examiner l'idée avec d'autres. Si c'est juste une mauvaise idée, c'est un bon feedback. Merci. Cependant, je suis toujours intéressé par les meilleures pratiques, si l'on s'y prenait de toute façon. C2DM le fait, donc la question est: comment font-ils et quelles sont leurs meilleures pratiques? Les commentaires ci-dessus sont des choses utiles à surveiller. –

1

Certaines choses ne vont pas bien ensemble. C'est "notifications push en temps réel" et "prévenir la vidange de la batterie". Vous devez certainement faire des compromis ici.

Je ne peux que recommander d'essayer quelques applications Android qui utilisent XMPP pour avoir une idée de la façon dont ils gèrent les connexions persistantes, les changements d'adresse IP et la consommation de la batterie. Si elles sont open-source, vous pouvez également voir le code et en tirer des leçons. Yaxim, Project MAXS et Beem pour n'en nommer que quelques-uns. Peut-être devriez-vous jeter un coup d'œil à XEP-0286: XMPP on Mobile Devices

Cela dit, êtes-vous sûr de vouloir réinventer la roue lorsque Google vous propose C2DM? Ce qui est optimisé pour ce cas d'utilisation. Je pense que cela a un peu de retard, donc ce n'est pas du tout "en temps réel". Mais encore une fois, soit vous vous retrouverez avec une solution qui tente agressivement d'établir une connexion persiste et draine la batterie, soit vous devrez vivre avec une sorte de retard (~ 0-30 min).

+0

Excellent lien sur XMPP sur les appareils mobiles. Quelques bons modèles de conception décrits dans ce doc. Des choses comme la compression, et si vous devez envoyer puis envoyer tout ce que vous avez depuis le niveau de puissance sera intensifié à ce stade de toute façon, etc –

+3

La seule raison pour laquelle je regarde des alternatives au Google C2DM est parce que C2DM exige à l'utilisateur de avoir un compte Google sur l'appareil. Je suis en train de concevoir une fonction push qui sera produite et vendue à Banks. Avoir à leur expliquer que leurs utilisateurs auront besoin de comptes google sera une conversation un peu gênant. –

+1

Je sais que c'est une vieille question mais les règles pour cela ont changé un peu pour le commutateur GCM. Les appareils plus récents n'ont plus besoin d'un compte Google. "Il utilise une connexion existante pour les services Google.Pour les appareils antérieurs à la version 3.0, les utilisateurs doivent configurer leur compte Google sur leurs appareils mobiles.Un compte Google n'est pas obligatoire sur les appareils fonctionnant sous Android 4.0.4 ou version ultérieure." - http://developer.android.com/google/gcm/gcm.html –

Questions connexes