Android GCM de base de la mise en œuvre

Mise à JOUR: j'ai corrigé les problèmes dans le code ci-dessous donc, cela fait une bonne base de travail exemple d'utilisation de GCM


Donc, je suis en train de mettre en œuvre Android GCM dans mon application. Voici les pièces que j'ai ajouté pour le manifeste:

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="20" />

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

...

<receiver
    android:name="com.google.android.gcm.GCMBroadcastReceiver"
    android:permission="com.google.android.c2dm.permission.SEND" >
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
        <category android:name="com.badbob.app.gmctestapp" />
    </intent-filter>
</receiver>

<service android:name=".GCMIntentService" />

J'ai ajouté le code suivant dans le onCreate de mon activité principale:

    GCMRegistrar.checkDevice( this );
    GCMRegistrar.checkManifest( this );
    final String regId = GCMRegistrar.getRegistrationId( this );
    if( regId.equals( "" ) ) {
        GCMRegistrar.register( this, GCM_SENDER_ID );
    }
    else {
        Log.v( LOG_TAG, "Already registered" );
    }

J'ai également créé le GCMIntenetService classe comme ceci:

public class GCMIntentService extends GCMBaseIntentService {

    private static final String LOG_TAG = "GetAClue::GCMIntentService";

    public GCMIntentService() {
        super( GCM_SENDER_ID );
        //TODO Auto-generated constructor stub
        Log.i( LOG_TAG, "GCMIntentService constructor called" );
    }

    @Override
    protected void onError( Context arg0, String errorId ) {
        //TODO Auto-generated method stub
        Log.i( LOG_TAG, "GCMIntentService onError called: " + errorId );
    }

    @Override
    protected void onMessage( Context arg0, Intent intent ) {
        //TODO Auto-generated method stub
        Log.i( LOG_TAG, "GCMIntentService onMessage called" );
        Log.i( LOG_TAG, "Message is: " + intent.getStringExtra( "message" ) );
    }

    @Override
    protected void onRegistered( Context arg0, String registrationId ) {
        //TODO Auto-generated method stub
        Log.i( LOG_TAG, "GCMIntentService onRegistered called" );
        Log.i( LOG_TAG, "Registration id is: " + registrationId );
    }

    @Override
    protected void onUnregistered( Context arg0, String registrationId ) {
        //TODO Auto-generated method stub
        Log.i( LOG_TAG, "GCMIntentService onUnregistered called" );
        Log.i( LOG_TAG, "Registration id is: " + registrationId );
    }
}

Lorsque je l'exécute-je obtenir ce LogCat:

07-11 11:28:46.340: V/GCMRegistrar(27435): Registering receiver
07-11 11:28:46.370: D/GCMRegistrar(27435): resetting backoff for com.badbob.app.getacluebeta
07-11 11:28:46.380: V/GCMRegistrar(27435): Registering app com.badbob.app.getacluebeta of senders 128205395388

De ce que j'ai glanées à partir d'autres postes, je devrais obtenir un numéro d'enregistrement dans LogCat mais je ne suis pas. Aussi onRegistered() dans GCMIntentService n'est jamais appelé. Donc, ce que je fais mal?

  • Vous venez de vous inscrire pour GCM? Essayez à nouveau quelques heures plus tard. Google Api ont un temps de retard, votre ID de l'expéditeur ne s'active immédiatement.
  • J'ai signé plus de 24 heures.
  • Pouvez-vous montrer le code de votre GCMBroadcastReceiver et GCMRegistrar classes?
  • Heu, je n'ai pas écrit ces classes. Ce que j'ai posté est tout le code que j'ai écrit. Je suis en manque de quelque chose?
  • ceux qui sont de la bibliothèque de classes. Contrairement à C2DM, GCM est livré avec une bibliothèque d'aide.
  • je vous remercie. En effet. Mais pourquoi ne Rooster242 ont enregistré le récepteur nommé "com.google.android.gcm.GCMBroadcastReceiver"? Il doit registe souhaité la diffusion de la classe de l'extension d'une BrodcastReceiver qui va déclencher l' ".GCMIntentService" de service.
  • C'est ma compréhension que le GCM bibliothèque gère pour vous et c'est pourquoi la classe doit être nommé exactement GCMIntentService. N'est-ce pas exact?
  • Où est GCM_SENDER_ID défini/affecté?

InformationsquelleAutor Rooster242 | 2012-07-11