Alexis
Alexis

Reputation: 16829

android C2DM notifications not working prior to android 4?

I trying to make push notifications work for my android app. The server seems OK since I receive notifications on my android 4 device. But I have other devices with android 2.2.1 and 2.3.4 that don't receive the notifications.

Here's my C2DMReceiver :

package vex.android;

import java.io.IOException;

import vex.android.settings.Local;
import vex.android.tool.Resources;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
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(Local.PushNotificationEmail);
    }

    @Override
    public void onError(Context context, String errorId) {
        Log.e("VEX-PUSHNOTIFICATION", "Error " + errorId);
    }

    @Override
    protected void onMessage(Context context, Intent intent) {

        String saleTitle = Resources.getString("pushnotificationtitle", context); 
        String saleMessage = intent.getStringExtra("salemessage");
        String SaleId = intent.getStringExtra("saleid");
        String isMultiSale = intent.getStringExtra("ismultisale");

        Boolean multisale = (isMultiSale != null && isMultiSale.length()>0) ?  Boolean.parseBoolean(isMultiSale.trim()) : false;
        Integer saleid = (SaleId != null && SaleId.length()>0) ? Integer.parseInt(SaleId.trim()) : -1;
        if(saleMessage == null || saleMessage.length() <= 0 ) saleMessage = Resources.getString("pushnoticationmessage", context);
        createNotification(context, saleTitle, saleMessage, saleid, multisale);
    }

    public void createNotification(Context context,String SaleTitle, String SaleMessage, Integer saleid, Boolean multisale) {

        NotificationManager notificationManager = (NotificationManager) context
                .getSystemService(Context.NOTIFICATION_SERVICE);
        Notification notification = new Notification(R.drawable.applicationicon,
                "Message received", System.currentTimeMillis());
        // Hide the notification after its selected
        notification.flags |= Notification.FLAG_AUTO_CANCEL;

        Intent intent = new Intent(context, MainApplication.class);
        intent.putExtra("saleid", saleid);
        intent.putExtra("ismultisale", multisale);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); // without flag a changed saleid wont be passed
        notification.setLatestEventInfo(context, SaleTitle, SaleMessage, pendingIntent);
        notificationManager.notify(saleid, notification);
    }

    @Override
    public void onRegistered(Context context, String registrationId) 
    throws IOException 
    {
        Local.setRegistrationId(registrationId);
    }

    @Override
    public void onUnregistered(Context context) 
    {
            Log.i("VEX-DEBUG", "successfully unregistered with C2DM server");
    }

}

I think the problem is there because event if I send the notification manually (with curl) it doesn't work with android 2.2 and 2.3. Any idea? Thanks

Upvotes: 0

Views: 758

Answers (2)

Dmitry Polishuk
Dmitry Polishuk

Reputation: 119

C2DM uses Google Messaging Service. GTalk uses this service as well. Sometimes this service might be turned off. To check all related information just type in this code - *#*#8255#*#*

C2DM is available on devices with android >= 2.2

Upvotes: 1

Ollie C
Ollie C

Reputation: 28509

I've not had any problems using C2DM on devices on older Android versions.

I suggest you get more devices to test with, and check your code - the problem is not an issue of a lack of C2DM support for older devices - it works on Android from v2.2 onwards.

Upvotes: 2

Related Questions