2016-06-08 4 views
0

я проблема с толчок уведомления GCM в Android, устройство регистрируется очень хорошо, я получаю жетон, но когда я отправить уведомление с помощью Gradle Command-GCM толчок уведомление не получает

. \ Gradlew.bat запустить -Pmsg = «»

я this- { «mESSAGE_ID»: 5514585301987612462} Проверьте ваше устройство/эмулятор для уведомления или LogCat для подтверждения получения сообщения GCM. Я не получаю сообщение ни в эмуляторе, ни в логарифме.

GcmSender.java

package gcm.play.android.samples.com.gcmsender; 

import org.apache.commons.io.IOUtils; 
import org.json.JSONObject; 

import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.net.HttpURLConnection; 
import java.net.URL; 

public class GcmSender { 

    public static final String API_KEY = "AIzaSyA9eC36JEy5JcbdtfU6zW5IhmJrkqioT7o"; 

    public static void main(String[] args) { 
     if (args.length < 1 || args.length > 2 || args[0] == null) { 
      System.err.println("usage: ./gradlew run -Pmsg=\"MESSAGE\" [-Pto=\"DEVICE_TOKEN\"]"); 
      System.err.println(""); 
      System.err.println("Specify a test message to broadcast via GCM. If a device's GCM registration token is\n" + 
        "specified, the message will only be sent to that device. Otherwise, the message \n" + 
        "will be sent to all devices subscribed to the \"global\" topic."); 
      System.err.println(""); 
      System.err.println("Example (Broadcast):\n" + 
        "On Windows: .\\gradlew.bat run -Pmsg=\"<Your_Message>\"\n" + 
        "On Linux/Mac: ./gradlew run -Pmsg=\"<Your_Message>\""); 
      System.err.println(""); 
      System.err.println("Example (Unicast):\n" + 
        "On Windows: .\\gradlew.bat run -Pmsg=\"<Your_Message>\" -Pto=\"<Your_Token>\"\n" + 
        "On Linux/Mac: ./gradlew run -Pmsg=\"<Your_Message>\" -Pto=\"<Your_Token>\""); 
      System.exit(1); 
     } 
     try { 
      // Prepare JSON containing the GCM message content. What to send and where to send. 
      JSONObject jGcmData = new JSONObject(); 
      JSONObject jData = new JSONObject(); 
      jData.put("message", args[0].trim()); 
      // Where to send GCM message. 
      if (args.length > 1 && args[1] != null) { 
       jGcmData.put("to", args[1].trim()); 
      } else { 
       jGcmData.put("to", "/topics/global"); 
      } 
      // What to send in GCM message. 
      jGcmData.put("data", jData); 

      // Create connection to send GCM Message request. 
      URL url = new URL("https://android.googleapis.com/gcm/send"); 
      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      conn.setRequestProperty("Authorization", "key=" + API_KEY); 
      conn.setRequestProperty("Content-Type", "application/json"); 
      conn.setRequestMethod("POST"); 
      conn.setDoOutput(true); 

      // Send GCM message content. 
      OutputStream outputStream = conn.getOutputStream(); 
      outputStream.write(jGcmData.toString().getBytes()); 

      // Read GCM response. 
      InputStream inputStream = conn.getInputStream(); 
      String resp = IOUtils.toString(inputStream); 
      System.out.println(resp); 
      System.out.println("Check your device/emulator for notification or logcat for " + 
        "confirmation of the receipt of the GCM message."); 
     } catch (IOException e) { 
      System.out.println("Unable to send GCM message."); 
      System.out.println("Please ensure that API_KEY has been replaced by the server " + 
        "API key, and that the device's registration token is correct (if specified)."); 
      e.printStackTrace(); 
     } 
    } 

} 

И RegistrationIntentService.java

package gcm.play.android.samples.com.gcmquickstart; 

import android.app.IntentService; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.preference.PreferenceManager; 
import android.support.v4.content.LocalBroadcastManager; 
import android.util.Log; 

import com.google.android.gms.gcm.GcmPubSub; 
import com.google.android.gms.gcm.GoogleCloudMessaging; 
import com.google.android.gms.iid.InstanceID; 

import java.io.IOException; 

public class RegistrationIntentService extends IntentService { 

    private static final String TAG = "RegIntentService"; 
    private static final String[] TOPICS = {"global"}; 

    public RegistrationIntentService() { 
     super(TAG); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 

     try { 

      InstanceID instanceID = InstanceID.getInstance(this); 
      String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId), 
        GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); 

      Log.i(TAG, "GCM Registration Token: " + token); 


      sendRegistrationToServer(token); 


      subscribeTopics(token); 


      sharedPreferences.edit().putBoolean(QuickstartPreferences.SENT_TOKEN_TO_SERVER, true).apply(); 
      // [END register_for_gcm] 
     } catch (Exception e) { 
      Log.d(TAG, "Failed to complete token refresh", e); 
      sharedPreferences.edit().putBoolean(QuickstartPreferences.SENT_TOKEN_TO_SERVER, false).apply(); 
     } 

     Intent registrationComplete = new Intent(QuickstartPreferences.REGISTRATION_COMPLETE); 
     LocalBroadcastManager.getInstance(this).sendBroadcast(registrationComplete); 
    } 


    private void sendRegistrationToServer(String token) { 
     // Add custom implementation, as needed. 
    } 


    private void subscribeTopics(String token) throws IOException { 
     GcmPubSub pubSub = GcmPubSub.getInstance(this); 
     for (String topic : TOPICS) { 
      pubSub.subscribe(token, "/topics/" + topic, null); 
     } 
    } 


} 

MainActivity.java

package gcm.play.android.samples.com.gcmquickstart; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.preference.PreferenceManager; 
import android.support.v4.content.LocalBroadcastManager; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.widget.ProgressBar; 
import android.widget.TextView; 

import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.GoogleApiAvailability; 

public class MainActivity extends AppCompatActivity { 

    private static final int PLAY_SERVICES_RESOLUTION_REQUEST = 9000; 
    private static final String TAG = "MainActivity"; 

    private BroadcastReceiver mRegistrationBroadcastReceiver; 
    private ProgressBar mRegistrationProgressBar; 
    private TextView mInformationTextView; 
    private boolean isReceiverRegistered; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mRegistrationProgressBar = (ProgressBar) findViewById(R.id.registrationProgressBar); 
     mRegistrationBroadcastReceiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       mRegistrationProgressBar.setVisibility(ProgressBar.GONE); 
       SharedPreferences sharedPreferences = 
         PreferenceManager.getDefaultSharedPreferences(context); 
       boolean sentToken = sharedPreferences 
         .getBoolean(QuickstartPreferences.SENT_TOKEN_TO_SERVER, false); 
       if (sentToken) { 
        mInformationTextView.setText(getString(R.string.gcm_send_message)); 
       } else { 
        mInformationTextView.setText(getString(R.string.token_error_message)); 
       } 
      } 
     }; 
     mInformationTextView = (TextView) findViewById(R.id.informationTextView); 

     // Registering BroadcastReceiver 
     registerReceiver(); 

     if (checkPlayServices()) { 
      // Start IntentService to register this application with GCM. 
      Intent intent = new Intent(this, RegistrationIntentService.class); 
      startService(intent); 
     } 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     registerReceiver(); 
    } 

    @Override 
    protected void onPause() { 
     LocalBroadcastManager.getInstance(this).unregisterReceiver(mRegistrationBroadcastReceiver); 
     isReceiverRegistered = false; 
     super.onPause(); 
    } 

    private void registerReceiver(){ 
     if(!isReceiverRegistered) { 
      LocalBroadcastManager.getInstance(this).registerReceiver(mRegistrationBroadcastReceiver, 
        new IntentFilter(QuickstartPreferences.REGISTRATION_COMPLETE)); 
      isReceiverRegistered = true; 
     } 
    } 

    private boolean checkPlayServices() { 
     GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance(); 
     int resultCode = apiAvailability.isGooglePlayServicesAvailable(this); 
     if (resultCode != ConnectionResult.SUCCESS) { 
      if (apiAvailability.isUserResolvableError(resultCode)) { 
       apiAvailability.getErrorDialog(this, resultCode, PLAY_SERVICES_RESOLUTION_REQUEST) 
         .show(); 
      } else { 
       Log.i(TAG, "This device is not supported."); 
       finish(); 
      } 
      return false; 
     } 
     return true; 
    } 

} 

MyGcmListenerService.java

package gcm.play.android.samples.com.gcmquickstart; 

import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.media.RingtoneManager; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.v4.app.NotificationCompat; 
import android.util.Log; 

import com.google.android.gms.gcm.GcmListenerService; 

public class MyGcmListenerService extends GcmListenerService { 

    private static final String TAG = "MyGcmListenerService"; 


    // [START receive_message] 
    @Override 
    public void onMessageReceived(String from, Bundle data) { 
     String message = data.getString("message"); 
     Log.d(TAG, "From: " + from); 
     Log.d(TAG, "Message: " + message); 

     if (from.startsWith("/topics/")) { 
      // message received from some topic. 
     } else { 
      // normal downstream message. 
     } 



     sendNotification(message); 

    } 



    private void sendNotification(String message) { 
     Intent intent = new Intent(this, MainActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, 
       PendingIntent.FLAG_ONE_SHOT); 

     Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
       .setSmallIcon(R.drawable.ic_stat_ic_notification) 
       .setContentTitle("GCM Message") 
       .setContentText(message) 
       .setAutoCancel(true) 
       .setSound(defaultSoundUri) 
       .setContentIntent(pendingIntent); 

     NotificationManager notificationManager = 
       (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

     notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); 
    } 
} 

MyInstanceIDListenerService.java

package gcm.play.android.samples.com.gcmquickstart; 

import android.content.Intent; 
import android.content.SharedPreferences; 
import android.preference.PreferenceManager; 
import android.util.Log; 

import com.google.android.gms.iid.InstanceID; 
import com.google.android.gms.iid.InstanceIDListenerService; 

public class MyInstanceIDListenerService extends InstanceIDListenerService { 

    private static final String TAG = "MyInstanceIDLS"; 


    // [START refresh_token] 
    @Override 
    public void onTokenRefresh() { 

     Intent intent = new Intent(this, RegistrationIntentService.class); 
     startService(intent); 
    } 
    // [END refresh_token] 
} 

QuickstartPreferences.java пакет gcm.play.android.samples.com.gcmquickstart;

public class QuickstartPreferences { 

    public static final String SENT_TOKEN_TO_SERVER = "sentTokenToServer"; 
    public static final String REGISTRATION_COMPLETE = "registrationComplete"; 

} 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="gcm.play.android.samples.com.gcmquickstart" > 

    <!-- [START gcm_permission] --> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <!-- [END gcm_permission] --> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="gcm.play.android.samples.com.gcmquickstart.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <!-- [START gcm_receiver] --> 
     <receiver 
      android:name="com.google.android.gms.gcm.GcmReceiver" 
      android:exported="true" 
      android:permission="com.google.android.c2dm.permission.SEND" > 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <category android:name="gcm.play.android.samples.com.gcmquickstart" /> 
      </intent-filter> 
     </receiver> 
     <!-- [END gcm_receiver] --> 

     <!-- [START gcm_listener] --> 
     <service 
      android:name="gcm.play.android.samples.com.gcmquickstart.MyGcmListenerService" 
      android:exported="false" > 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      </intent-filter> 
     </service> 
     <!-- [END gcm_listener] --> 
     <!-- [START instanceId_listener] --> 
     <service 
      android:name="gcm.play.android.samples.com.gcmquickstart.MyInstanceIDListenerService" 
      android:exported="false"> 
      <intent-filter> 
       <action android:name="com.google.android.gms.iid.InstanceID"/> 
      </intent-filter> 
     </service> 
     <!-- [END instanceId_listener] --> 
     <service 
      android:name="gcm.play.android.samples.com.gcmquickstart.RegistrationIntentService" 
      android:exported="false"> 
     </service> 
    </application> 

</manifest> 
+0

Вы объявили услуги в вашем файле манифеста? Можете ли вы опубликовать файл манифеста? – Bubu

+0

Добавили ли вы GCMListner в свой манифест? –

+0

Да, я добавил их. –

ответ

0

Пожалуйста, свяжитесь с This ссылку и перепроверить код

+0

Да, я проверил его, но он отображает то же сообщение, что и выше. –

Смежные вопросы