Aller au contenu

Push et appli


Fluckysan

Recommended Posts

Sinon il y a autre chose : utiliser Google Talk :) Bon, par contre ça nécessite d'accéder au login/mot de passe gtalk de l'utilisateur, ce pour quoi ils pourraient à raison rechigner vu les accès que ça offre, mais par contre techniquement c'est fingers in the nose.

Côté serveur qui "dispatche" les informations, tu peux utiliser un compte gtalk qui va broadcaster les messages.

Bien sûr, ça marche avec n'importe quel serveur XMPP, mais l'avantage ici c'est qu'il y a la puissance d'infrastructure de Google derrière.

Lien vers le commentaire
Partager sur d’autres sites

L'idée et la mise en oeuvre sont intéressantes !

Je ne savais pas qu'il était si simple de mettre en place GTalk dans une appli :)

Merci pour le lien

Bon ça ne correspond pas tout à fait à ce que je cherche mais on commence à avoir des solutions ;)

Lien vers le commentaire
Partager sur d’autres sites

pour faire du push tres simplement ( ce que je fait pour moi perso )

un serveur , une socket , un client .

J'explique :

le client se connecte juste au serveur , une fois connecté il ne fait rien d'autre que de rester connecté ( ne consome rien en data ni en batterie ) , le serveur envoi un packet TCP ( ou udp selon les gouts ) au client contenant les datas ....

voilou c'est tout et c'est tres simple a realiser .....

Modifié par dorian73
Lien vers le commentaire
Partager sur d’autres sites

le client se connecte juste au serveur , une fois connecté il ne fait rien d'autre que de rester connecté ( ne consome rien en data ni en batterie )

Je ne comprends toujours pas comment c'est possible d'écouter sur une socket sans consommer de la batterie. Pour savoir si un message est dispo, il faut bien établir un lien entre l'antenne 3G et le téléphone, non ? En temps normal (c'est à dire quand on ne fait pas de requetes data), la 3G n'est même pas active sur le telephone, non ?

Si quelqu'un a des infos sur "connection entre un téléphone et le reste du monde pour les nuls", ca m'interesse !!

Emmanuel / Alocaly

Lien vers le commentaire
Partager sur d’autres sites

en faite , ca consome , mais tres peu ...

un modem consome vachement a la connexion ( en batterie ) mais carrement moin lorsqu'il est connecté .

donc suivant l'intervale a laquelle tu veut envoyer ou recevoir des données , il vaut mieu rester connecté plutot que se deconnecter et se reconnecter .

j'ai fait le test sur un tatoo en 2.1, je suis resté connecté a un serveur ( sans envoyer de datas , juste en envoyant un signal toutes les minutes pour voir si j'etait bien connecté ) 5 jours sans recharger la batterie ( sans rien faire d'autre non plus sur le telephone ) a l'arrivée , il me restait 15% de batterie .

tout ca pour dire que ca consome vraiment rien :) :)

Lien vers le commentaire
Partager sur d’autres sites

  • 2 weeks later...

En wifi nous avons une IP "constante" sur un laps de temps qui permet au serveur de faire du push de données vers le mobile. Les sockets fonctionnent.

En 3G, la connexion Internet n'est pas continue et il n'est pas possible de faire du push classique.

Ericsson propose pour palier à cela d'envoyer un sms court au téléphone qui donne instruction à une app qui écoute de se connecter à lui.

Google, lui, vient de proposer C2ME (Android 2.2) qui permet du push grâce au compte Google. Comment ou grâce à quoi, je ne sais pas encore.

Lien vers le commentaire
Partager sur d’autres sites

Sympa la technique du socket mais comment ça se passe à grande échelle comme l'a soulevé Naholyr

Pour ce qui est de la connexion permanente, le push doit fonctionner de la même manière, il faut bien que le serveur ait un canal par lequel informer le mobile :o

Lien vers le commentaire
Partager sur d’autres sites

  • 7 months later...

Bonjour,

Je reprend ce sujet qui traîte du push sous android pour demander un peu d'aide au cas où un développeur ce serait jeté dans la sujet =)

J'ai suivi le tutô suivant : http://dmathieu.com/fr/android/notifications-push-avec-android

J'ai repris tout ça néanmoins je n'arrive pas à recevoir de réponse du serveur C2DM...

Voici mon code :)

		
Intent regIntent = new Intent("com.google.android.c2dm.intent.REGISTER");
regIntent.putExtra("app", PendingIntent.getBroadcast(AmisActivity.this, 0, new Intent(), 0));
regIntent.putExtra("sender", "monAdresse@gmail.com"); // Je précise que j'ai bien remplacer par mon adresse mail
                                                                               // et que j'ai bien enregistré cette adresse à C2DM
ComponentName retour = startService(regIntent);
System.out.println("retour : " + retour);

La variable retour me renvoi bien un ComponentInfo{com.google.android.etc....}

Le problème est donc dans la partie suivante je suppose...

/*
 * Méthode de réception de push
 */
public void onReceive(Context context, Intent intent) {

         Toast.makeText(this, "PUSH RECU !!!", Toast.LENGTH_LONG).show();

    if (intent.getAction().equals("com.google.android.c2dm.intent.REGISTRATION")) {
        String registration = intent.getStringExtra("registration_id"); 

        if (intent.getStringExtra("error") != null) {
             // L'enregistrement a échoué. Réessayez plus tard.
        	System.out.println("***erreur push : " + intent.getStringExtra("error"));
        } else if (registration != null) {
            // L'enregistrement a correctement été effectué.
           // Transmettez ici l'identifiant d'enregistrement au serveur Web qui transmettra les messages.
        	System.out.println("***enregistrement réussi : " + registration);
        }
    }

}

Ici, même le Toast du début ne s'affiche pas. Je n'ai donc rien qui rentre dans cette méthode...

Est-ce qu'il y à une classe à implémentée ou quelque chose à faire que j'aurai pu oublier ?

Lien vers le commentaire
Partager sur d’autres sites

Salut salut amis frandroidien =)

J'ai réussi à faire marcher le push donc si jamais ça intéresse quelqu'un je post la façon de faire....

Votre projet doit être en 2.2 minimum (et je crois qu'il faut qu'il ait la librairie Google Apis mais je ne suis pas sûr, je n'ai pas testé sans^^)

Commencez par télécharger et placer dans votre dossier les classes C2DMBaseReceiver, C2DMBroadcastReceiver et C2DMessaging du package com.google.android.c2dm.

Rajoutez ensuite dans votre manifest les permissions suivantes :

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<permission android:name="[b]votre.package.avous[/b].permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="[b]votre.package.avous[/b].permission.C2D_MESSAGE" />

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

Ensuite, toujours dans le manifest mais cette fois ci entre les balises <application></application> Placez le code suivant :

<service android:name=".C2DMReceiver" />
<receiver android:name="com.google.android.c2dm.C2DMBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
	<action android:name="com.google.android.c2dm.intent.RECEIVE" />
	<category android:name="[b]votre.package.avous[/b]" />
</intent-filter>

<intent-filter>
	<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
	<category android:name="[b]votre.package.avous[/b]" />
</intent-filter>
</receiver>

Créez ensuite cette classe :

import android.content.Context;
import android.content.Intent;
import android.util.Log;
import com.google.android.c2dm.C2DMBaseReceiver;

public class C2DMReceiver extends C2DMBaseReceiver {
public C2DMReceiver() {
super("[b]votre.mail[/b]@gmail.com");
}

@Override
public void onRegistrered(Context context, String registrationId) {
Log.w("C2DMReceiver-onRegistered",registrationId);
}

@Override
public void onUnregistered(Context context) {
Log.w("C2DMReceiver-onUnregistered","got here!");
}

@Override
public void onError(Context context, String errorId) {
Log.w("C2DMReceiver-onError",errorId);
}

@Override
protected void onMessage(Context context, Intent intent) {
Log.w("C2DMReceiver", intent.getStringExtra("payload"));
}
}

Il est important que le mail soit enregistré sur C2DM. Pour cela rendez vous à l'adresse suivante :

http://code.google.com/intl/fr/android/c2dm/signup.html

(Normalement vous recevrez un mail directement pour vous dire que vous êtes bien enregistré avec cette adresse)

Il ne vous reste maintenant plus qu'une ligne à écrire dans votre main :)

C2DMessaging.register(this, "[b]votre.mail[/b]@gmail.com");

Et normalement vous devriez voir dans votre logCat la ligne vous informant que vous avez bien été enregistré.

J'espère en avoir aider certains.

Bonne continuation

Modifié par Elth
Lien vers le commentaire
Partager sur d’autres sites

  • 4 months later...

Commencez par télécharger et placer dans votre dossier les classes C2DMBaseReceiver, C2DMBroadcastReceiver et C2DMessaging du package com.google.android.c2dm.

Bonjour,

Déjà , merci pour ce code partagé :)

Où puis-je trouver les classes citées ?

C'est après s'être enregistré sur C2DM qu'on les a ? Car apparemment j'ai vu un message comme quoi C2DM était réservé aux Labs et pas encore aux développeurs...

Est-ce gratuit ?

Merci bien

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Je me suis inscrit auprès de C2DM, c'est effectivement gratuit.

Par contre je ne trouve pas le package com.google.android.c2dm à télécharger..

Et concernant la partie serveur pour envoyer la notification, auriez-vous un lien avec un tutoriel ? ( le message proposé par Elth nous aide à nous enregistrer, mais quels sont les protocoles pour la suite ? J'ai un serveur pour placer un script donc théoriquement pas besoin de prendre un service )

Merci :)

P.S. : désolé ça doit vous paraître basique mais je galère avec ces notifications et je ne suis pas du tout familier avec eclipse du coup j'ai un peu la tête comme une patate à force de faire du google search pour une chose qui semble tellement évidente à faire...

Modifié par guigs06
Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...