I have made a Receiver, and then im using Lars Vogels FakeServer to send messages, have also tried Curl though, and it gives same result.
Instead of getting a com.google.android.c2dm.RECEIVE with a message, i am current getting: com.google.c2dm.REGISTATION with an unregister event.
**My receiver**:
package dk.lector.cms.c2dm;
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.os.Bundle;
import android.util.Log;
import dk.lector.cms.R;
import dk.lector.cms.StartActivity;
public class C2DMReceiver extends BroadcastReceiver {
private static final String TAG = C2DMReceiver.class.getSimpleName();
@Override
public void onReceive(Context ctx, Intent intent) {
Bundle data = intent.getExtras();
if (data != null) {
data.isEmpty(); // Forårsager extras bliver pakket ud så toString()
// virker
}
Log.i(TAG, " onReceive(" + intent + "\n" + data);
if (intent.getAction().equals(
"com.google.android.c2dm.intent.REGISTRATION")) {
String registration = intent.getStringExtra("registration_id");
if (intent.getStringExtra("error") != null) {
Log.i(TAG,
" Registrering fejlede, prøv igen senere (er Android Marked installeret?)");
} else if (intent.getStringExtra("unregistered") != null) {
Log.i(TAG,
" Enheden er afregistreret. Yderligere serverbeskedder bliver afvist");
} else if (registration != null) {
// 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.
Log.i(TAG, " Enheden er registreret:\nregistration_id="
+ registration);
Log.i(TAG,
" Denne ID skal sendes til din server så serveren kan kontakte enheden");
}
} else if (intent.getAction().equals(
"com.google.android.c2dm.intent.RECEIVE")) {
if (data.getString("msg") != null) {
if (!data.getString("msg").equals("")) {
// Aktiviteten kører ikke. Start den og send data
// meddelelsen med i extra
Intent i = new Intent(ctx, StartActivity.class);
i.putExtras(data);
// Kode til at starte aktiviteten direkte - ikke så
// brugervenligt!
// i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// ctx.startActivity(i);
// Opret en notifikation i stedet
PendingIntent pi = PendingIntent.getActivity(ctx, 0, i, 0);
Notification n = new Notification(
R.drawable.ic_noti_lector, "Meddelelse fra skyen",
System.currentTimeMillis());
n.setLatestEventInfo(ctx, "Meddelelse fra skyen",
data.getString("msg"), pi);
NotificationManager nm = (NotificationManager) ctx
.getSystemService(Context.NOTIFICATION_SERVICE);
nm.notify(42, n);
}
}
if (data.getString("newData") != null) {
Log.i(TAG,
"newData tag(shared prefs) set to true : "
+ data.getString("newData"));
OurPreferences prefs = new OurPreferences(ctx);
prefs.setNewData(true);
}
}
}
}
**My Manifest**
package="dk.lector.cms"
android:versionCode="1"
android:versionName="1.0" >
<permission
android:name="dk.lector.cms.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="10" />
<uses-permission android:name="dk.lector.cms.permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.MOUNT_FORMAT_FILESYSTEMS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.SET_WALLPAPER" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<application
android:debuggable="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
<receiver
android:name="dk.lector.cms.c2dm.C2DMReceiver"
android:permission="com.google.android.c2dm.permission.SEND"
android:enabled="true">
<intent-filter>
<action android:name="com.google.android.c2dm.RECEIVE" />
<category android:name="dk.lector.cms" />
</intent-filter>
<intent-filter >
<action android:name="com.google.android.c2dm.intent.REGISTRATION"/>
<category android:name="dk.lector.cms"/>
</intent-filter>
</receiver>
<activity
android:name="StartActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".menu.MenuActivity"
android:screenOrientation="portrait" >
</activity>
<provider
android:name=".data.TestAppContentProvider"
android:authorities="dk.lector.cms.TABLES" >
</provider>
<activity android:name=".c2dm.MeddelelserFraServer" >
</activity>
<activity android:name=".social.SocialFeedActivity" >
</activity>
<activity android:name=".notification.NotificationDisplay" >
</activity>
<activity android:name=".store.cammode.StoreLocatorCamModeActivity" >
</activity>
<activity android:name=".store.StoreLocatorMapActivity" >
</activity>
<activity
android:name="dk.lector.mobile.data.preload.PreloadActivity"
android:screenOrientation="portrait" >
</activity>
</application>
</manifest>
**my registration method**
private void register(){
Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER");
registrationIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent("com.google.android.c2dm.intent.REGISTER"), 0)); // boilerplate
startService(registrationIntent);
}
**my relavant logcat** register, fakeserver send, and "receive/unregister"
1
05-23 09:23:10.415: I/C2DMReceiver(1427): onReceive(Intent { act=com.google.android.c2dm.intent.REGISTRATION cat=[dk.lector.cms] cmp=dk.lector.cms/.c2dm.C2DMReceiver (has extras) }
05-23 09:23:10.415: I/C2DMReceiver(1427): Bundle[{registration_id=APA91bGFvcIAP-GI_LwBXrdhMXiQiSmzHhBr3OPpi3sSciYkCAIhsm6EcuAl0suNj0JasX3lDaGlEumJSG9eVRlJml4Vb1ZdDiURaniRv0w9a6VwKS3hKQdyhr-YaabJiG6j6BkCWD1_ur1KGm5NPHUJnLDmMmlZtQ}]
05-23 09:23:10.415: I/C2DMReceiver(1427): Enheden er registreret:
05-23 09:23:10.415: I/C2DMReceiver(1427): registration_id=APA91bGFvcIAP-GI_LwBXrdhMXiQiSmzHhBr3OPpi3sSciYkCAIhsm6EcuAl0suNj0JasX3lDaGlEumJSG9eVRlJml4Vb1ZdDiURaniRv0w9a6VwKS3hKQdyhr-YaabJiG6j6BkCWD1_ur1KGm5NPHUJnLDmMmlZtQ
05-23 09:23:10.415: I/C2DMReceiver(1427): Denne ID skal sendes til din server så serveren kan kontakte enheden
2
05-23 09:34:53.115: E/AUTH(1804): DQAAAL4AAAD3W6L4bYJb8bO9_MDl7J4k_BDH-g1fm5MZ2v77rnwICYA9Hvgj2Vi5RIfOfpiGUpR7qUfI1MWmhPnQgr3jFj9R8wFBXQsMmyVGE7uqweWr7ArpAydNuLwLDkf5QIuBnVfuSb1TyEamLfZrJNYLHHYmIZr_7xmM9y6_g_dGKiBqDcE1zMqcPi0nWPNkCPX-dGlg1OhjIIEfu8ZMpxnm6M5jmJdb5l6yogcMteAD6ws157_-wBDWVRoMJx1g0mx__y4
05-23 09:34:55.306: E/Tag(1804): Started sending Message
05-23 09:34:55.306: E/Tag(1804): DQAAAL4AAAD3W6L4bYJb8bO9_MDl7J4k_BDH-g1fm5MZ2v77rnwICYA9Hvgj2Vi5RIfOfpiGUpR7qUfI1MWmhPnQgr3jFj9R8wFBXQsMmyVGE7uqweWr7ArpAydNuLwLDkf5QIuBnVfuSb1TyEamLfZrJNYLHHYmIZr_7xmM9y6_g_dGKiBqDcE1zMqcPi0nWPNkCPX-dGlg1OhjIIEfu8ZMpxnm6M5jmJdb5l6yogcMteAD6ws157_-wBDWVRoMJx1g0mx__y4
05-23 09:34:55.795: E/Tag(1804): 200
05-23 09:34:55.795: I/global(1804): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
05-23 09:34:55.795: I/Tag(1804): Successfully sent data message to device: id=0:1337758496204580%99b04eaf00000030
3
05-23 09:34:56.015: I/C2DMReceiver(1761): onReceive(Intent { act=com.google.android.c2dm.intent.REGISTRATION cat=[dk.lector.cms] cmp=dk.lector.cms/.c2dm.C2DMReceiver (has extras) }
05-23 09:34:56.015: I/C2DMReceiver(1761): Bundle[{unregistered=dk.lector.cms}]
05-23 09:34:56.015: I/C2DMReceiver(1761): Enheden er afregistreret. Yderligere serverbeskedder bliver afvist