2017-10-16 12 views
0

Je travaille sur une application Android où je me suis inscrit à la notification push FCM dans ma classe de notification Parse Push personnalisée. Lors de l'envoi de Push depuis Parse Dashboard, il arrive dans mon Receiver mais ne l'affiche pas dans la barre de notification de mon écran. Ma classe personnalisée avec le manifeste et le code est donnée ci-dessous. J'ai cherché beaucoup de questions similaires, mais pas de chance.La notification push ne s'affiche pas en utilisant parse sdk dans Android 8.0

Mon Manifest:

<receiver android:name="com.parse.GcmBroadcastReceiver" 
      android:permission="com.google.android.c2dm.permission.SEND"> 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 
       <category android:name="com.kolbeh" /> 
      </intent-filter> 
     </receiver> 
     <meta-data android:name="com.parse.push.gcm_sender_id" 
      android:value="id:854901#####" /> 

     <service android:name="com.parse.PushService" /> 

     <receiver 
      android:name="dinewhere.fcm.CustomPushReceiver" 
      android:exported="false"> 
      <intent-filter> 
       <action android:name="com.parse.push.intent.RECEIVE" /> 
       <action android:name="com.parse.push.intent.OPEN" /> 
       <action android:name="com.parse.push.intent.DELETE" /> 
      </intent-filter> 
     </receiver> 

My Custom récepteur:

public class CustomPushReceiver extends ParsePushBroadcastReceiver { 
    private final String TAG = CustomPushReceiver.class.getSimpleName(); 

    private NotificationUtils notificationUtils; 

    private Intent parseIntent; 

    public CustomPushReceiver() { 
     super(); 
    } 

    @Override 
    protected void onPushReceive(Context context, Intent intent) { 
     //super.onPushReceive(context, intent); 

     if (intent == null) 
      return; 

     try { 
      JSONObject json = new JSONObject(intent.getExtras().getString("com.parse.Data")); 

      Log.e(TAG, "Push received: " + json); 

      parseIntent = intent; 

      parsePushJson(context, json); 

     } catch (JSONException e) { 
      Log.e(TAG, "Push message json exception: " + e.getMessage()); 
     } 
    } 

    @Override 
    protected void onPushDismiss(Context context, Intent intent) { 
     super.onPushDismiss(context, intent); 
    } 

    @Override 
    protected void onPushOpen(Context context, Intent intent) { 
     super.onPushOpen(context, intent); 
     System.out.println("asdf"); 
    } 

    /** 
    * Parses the push notification json 
    * 
    * @param context 
    * @param json 
    */ 
    private void parsePushJson(Context context, JSONObject json) { 
     try { 
      String message = json.getString("alert"); 

      Intent resultIntent = new Intent(context, MainActivity.class); 
      resultIntent.putExtra("Chat", true); 
      showNotificationMessage(context, "Hello", message, resultIntent); 

     } catch (JSONException e) { 
      Log.e(TAG, "Push message json exception: " + e.getMessage()); 
     } 
    } 


    /** 
    * Shows the notification message in the notification bar 
    * If the app is in background, launches the app 
    * 
    * @param context 
    * @param title 
    * @param message 
    * @param intent 
    */ 
    private void showNotificationMessage(Context context, String title, String message, Intent intent) { 

     notificationUtils = new NotificationUtils(context); 

     intent.putExtras(parseIntent.getExtras()); 

     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 

     notificationUtils.showNotificationMessage(title, message, intent); 
    } 
} 

Mon showNotificationMessage Méthode:

public void showNotificationMessage(String title, String message, Intent intent) { 

     // Check for empty push message 
     if (TextUtils.isEmpty(message)) 
      return; 

     if (airportAssistUtil.isAppIsInBackground(mContext)) { 
      // notification icon 
      int icon = R.mipmap.ic_launcher_round; 



      PendingIntent resultPendingIntent = 
        PendingIntent.getActivity(
          mContext, 
          0, 
          intent, 
          PendingIntent.FLAG_CANCEL_CURRENT 
        ); 

      NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle(); 

      PendingIntent contentIntent = PendingIntent.getActivity(mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 

      NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
        mContext); 
      Notification notification = mBuilder.setSmallIcon(icon).setTicker("Kolbeh").setWhen(0) 
        .setAutoCancel(true) 
        .setStyle(inboxStyle) 
        .setContentTitle("Kolbeh") 
        .setContentIntent(resultPendingIntent) 
        .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) 
        .setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), icon)) 
        .setContentText(message) 
        .build(); 

      mBuilder.setContentIntent(contentIntent); 

      NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); 
      notificationManager.notify(count++, notification); 
     } 
    } 

Répondre

2

Si votre application cible Android O. Vous devez donc afficher une notification avec notification Channel. De android O Chaque notification doit contenir dans un canal Read here.

+0

merci pour votre réponse ici. Pouvez-vous s'il vous plaît me donner un exemple de canal de notification selon mon code? Je suis un peu confus dedans. –

+0

Si votre application cible Android O? Alors voici un [Exemple] (https://medium.com/exploring-android/exploring-android-o-notification-channels-94cd274f604c) pour explorer Android O Notification Channel. S'il vous plaît, passez à travers. Et il y a aussi un [Sample] (https://github.com/googlesamples/android-NotificationChannels) de git. – ADM

+0

Ne fonctionne toujours pas @ADM –