推送通知未显示在Android的8.0

推送通知未显示在Android的8.0

问题描述:

我工作的地方我有我的自定义解析推送通知类注册的FCM推送通知Android应用程序使用解析SDK。从Parse Dashboard发送Push时,它会进入我的Receiver,但不会显示在我的屏幕的Notification Bar中。下面给出了我的自定义类以及Manifest和代码。我也搜索了许多类似的问题,但没有运气。推送通知未显示在Android的8.0

我的清单:

<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> 

我的自定义接收器:

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); 
    } 
} 

我showNotificationMessage方法:

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); 
     } 
    } 

如果您的应用定位到Android O.那么您必须使用通知频道显示通知。在AndroidØ每个通知必须包含一个通道Read here内。

+0

感谢你的答案在这里。你能给我一个通知通道的例子吗?我有点困惑。 –

+0

如果您的应用定位的Android 2 O然后,这里是一个[示例](https://medium.com/exploring-android/exploring-android-o-notification-channels-94cd274f604c),用于探索Android O Notification Channel。请通过它。还有一个来自git的[Sample](https://github.com/googlesamples/android-NotificationChannels)。 – ADM

+0

仍然没有工作@ADM –