getting null device id while registering to gcm

前端 未结 2 1300
你的背包
你的背包 2020-11-29 12:59
GCMRegistrar.checkDevice(this);
GCMRegistrar.unregister(this);  
GCMRegistrar.checkManifest(this);

if (GCMRegistrar.isRegistered(this)) {
    GCMRegistrar.getRegist         


        
相关标签:
2条回答
  • 2020-11-29 13:24

    you have to import google play services project from the sdk into your workspace and add it as a lib to your project.then follow the below steps:

    1).//declare global
        private GoogleCloudMessaging _gcm;
        String _devideId;
    2). then execute a new thread like this:
    private class GetDeviceID extends AsyncTask<String, String, String>{
        @Override
        protected void onPreExecute() {
            // progress bar
            super.onPreExecute();
        }
    
    
    
        @Override
        protected String doInBackground(String... params) {
            if (_gcm == null) {
                _gcm = GoogleCloudMessaging.getInstance(CompanyRegistration.this);
            }
    
            try {
                _devideId= _gcm.register("your project number of 12 digit");
                System.out.println("my id is\n" + _devideId+ _devideId.length());
    
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    
        @Override
        protected void onPostExecute(String result) {
    
            //dismiss dialouge here
    
        }
    }
    3). in _devideId String you get the device id.
    4).modify your manifest file as
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="com.google.android.c2dm.permission.SEND" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    

    //in application tag add your reciever

        <receiver
            android:name="your package name.GcmBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
    
                <category android:name="your package name" />
            </intent-filter>
        </receiver>
    

    // broadcast reciever class

      import android.app.Activity;
       import android.app.NotificationManager;
        import android.app.PendingIntent;
        import android.content.BroadcastReceiver;
        import android.content.Context;
       import android.content.Intent;
         import android.content.SharedPreferences;
       import android.media.RingtoneManager;
       import android.support.v4.app.NotificationCompat;
        import android.util.Log;  
    
    import com.google.android.gms.gcm.GoogleCloudMessaging;
    
    public class GcmBroadcastReceiver extends BroadcastReceiver {
    static final String TAG = "GCMDemo";
    public static final int NOTIFICATION_ID = 1;
    private NotificationManager mNotificationManager;
    NotificationCompat.Builder builder;
    Context ctx;
    private SharedPreferences prefs;
    Boolean alert = true;
    
    @Override
    public void onReceive(Context context, Intent intent) {
    
        prefs = context.getSharedPreferences(
                GcmBroadcastReceiver.class.getSimpleName(),
                context.MODE_PRIVATE); // changes here
    
        GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context);
        ctx = context;
        String messageType = gcm.getMessageType(intent);
        System.out.println("reciever is" + messageType);
        if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType)) {
            sendNotification("Send error: " + intent.getExtras().toString());
        } else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED
                .equals(messageType)) {
            sendNotification("Deleted messages on server: "
                    + intent.getExtras().toString());
        } else {
    
            Log.i("aaaaaa", intent.getExtras().toString());
            sendNotification(intent.getExtras().getString("message").toString());
        }
        setResultCode(Activity.RESULT_OK);
    }
    
    private void sendNotification(String msg) {
        mNotificationManager = (NotificationManager) ctx
                .getSystemService(Context.NOTIFICATION_SERVICE);
    
        PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0,
                new Intent(ctx, GcmBroadcastReceiver.class), 0); // changes here
    
        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
                ctx).setSmallIcon(R.drawable.ic_launcher)
                .setContentTitle("Come Fetch Me Notification ")
                .setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
                .setContentText(msg);
    
        mBuilder.setContentIntent(contentIntent);
        mBuilder.setSound(RingtoneManager
                .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
        mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
    }
    }
    
    0 讨论(0)
  • 2020-11-29 13:33

    Try checking the App ID in the Google console and check if you are activating it on the console.

    For more information you can check out this tutorial.

    http://www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gcm-php-and-mysql/

    I was successfully able to implement it.

    0 讨论(0)
提交回复
热议问题