Pages

Friday 11 January 2013

GOOGLE ANDROID C2DM TUTORIAL (ANDROID PUSH NOTIFICATIONS)


Overview of the manifest changes:

Permission to receive C2DM messages
Access to the internet
Restrict access to your C2DM messages so no other app can see them
Declare a Receiver, that we’ll create later, that will let us receive the C2DM events
Make sure that the minSdkVersion is set so that only 2.2 and higher can access your app

<manifest package="com.example.myapp" ...>

   <!-- Only this application can receive the messages and registration result -->
   <permission android:name="com.example.myapp.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
   <uses-permission android:name="com.example.myapp.permission.C2D_MESSAGE" />

   <!-- This app has permission to register and receive message -->
   <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

   <!-- Send the registration id to the server -->
   <uses-permission android:name="android.permission.INTERNET" />

   <application...>
      <!-- Only C2DM servers can send messages for the app. If permission is not set -
any other app can generate it -->
      <receiver android:name=".MyC2dmReceiver"
android:permission="com.google.android.c2dm.permission.SEND">
          <!-- Receive the actual message -->
          <intent-filter>
              <action android:name="com.google.android.c2dm.intent.RECEIVE" />
              <category android:name="com.example.myapp" />
          </intent-filter>
          <!-- Receive the registration id -->
          <intent-filter>
              <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
              <category android:name="com.example.myapp" />
          </intent-filter>
      </receiver>
      ...
   </application>
   ...
</manifest>


----------------------------------------------


Send the Registration call

Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER");

registrationIntent.putExtra("app", PendingIntent.getBroadcast(context, 0, new Intent(), 0));

registrationIntent.putExtra("sender", "test@gmail.com"); // google email id for registration

context.startService(registrationIntent);


--------------------------------------------------

receiver for registration and receiving messagess


import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences.Editor;
import android.util.Log;

import com.rain.skullcandy.R;
import com.rain.skullcandy.activities.FavoriteLocations;
import com.rain.skullcandy.model.SkullCandyModel;

public class MyC2dmReceiver extends BroadcastReceiver {
private static String KEY = "c2dmPref";
private static String REGISTRATION_KEY = "registrationKey";

private Context context;
@Override
public void onReceive(Context context, Intent intent) {
   this.context = context;
if (intent.getAction().equals("com.google.android.c2dm.intent.REGISTRATION")) {
       handleRegistration(context, intent);
   } else if (intent.getAction().equals("com.google.android.c2dm.intent.RECEIVE")) {
       handleMessage(context, intent);
   }
}

private void handleRegistration(Context context, Intent intent) {
   String registration = intent.getStringExtra("registration_id");
   if (intent.getStringExtra("error") != null) {
       // Registration failed, should try again later.
   Log.d("c2dm", "registration failed");
   String error = intent.getStringExtra("error");
   if(error == "SERVICE_NOT_AVAILABLE"){
   Log.d("c2dm", "SERVICE_NOT_AVAILABLE");
   }else if(error == "ACCOUNT_MISSING"){
   Log.d("c2dm", "ACCOUNT_MISSING");
   }else if(error == "AUTHENTICATION_FAILED"){
   Log.d("c2dm", "AUTHENTICATION_FAILED");
   }else if(error == "TOO_MANY_REGISTRATIONS"){
   Log.d("c2dm", "TOO_MANY_REGISTRATIONS");
   }else if(error == "INVALID_SENDER"){
   Log.d("c2dm", "INVALID_SENDER");
   }else if(error == "PHONE_REGISTRATION_ERROR"){
   Log.d("c2dm", "PHONE_REGISTRATION_ERROR");
   }
   } else if (intent.getStringExtra("unregistered") != null) {
       // unregistration done, new messages from the authorized sender will be rejected
   Log.d("c2dm", "unregistered");

   } else if (registration != null) {
   Log.d("c2dm", registration);
   Editor editor =
                context.getSharedPreferences(KEY, Context.MODE_PRIVATE).edit();
            editor.putString(REGISTRATION_KEY, registration);
    editor.commit();
      // Send the registration ID to the 3rd party site that is sending the messages.
      // This should be done in a separate thread.
      // When done, remember that all registration is done.
   }
}

private void handleMessage(Context context, Intent intent)
{
//Do whatever you want with the message
}
}


No comments :

Post a Comment