वर्तमान में मैं इस प्रकार अधिसूचना भेज रहा हूं:

    {
        "data" : {
            "sound": "default",
            "icon": "ic_app_launcher",
            "..." : "..."
            .
            .
            .
         }
    }

ई/एफसीएमबंडल: डंपिंग इंटेंट स्टार्ट

ई/एफसीएमबंडल: [google.sent_time=...]

ई/एफसीएमबंडल: [से=...]

ई/एफसीएमबंडल: [आइकन=ic_app_launcher]

ई/एफसीएमबंडल: [ध्वनि = डिफ़ॉल्ट]

ई/एफसीएमबंडल: [google.message_id=0:...]

ई/एफसीएमबंडल: [collapse_key=...]

ई/एफसीएमबंडल: डंपिंग इंटेंट एंड

यह लॉग है जो मुझे एफसीएम से प्राप्त होता है जब ऐप पृष्ठभूमि में होता है, और अधिसूचना के क्लिक पर यह लॉन्चर गतिविधि खुल जाएगा।

मैंने एक ही मुद्दे से संबंधित कई उत्तर पढ़े हैं लेकिन मेरे लिए काम नहीं करते हैं। मैं डेटा-संदेश भेज रहा हूं और उसके अंदर यह प्राप्त होता है। ध्वनि और चिह्न भी। लेकिन काम नहीं करते। कोई सूचना ध्वनि नहीं है और चिह्न एक वर्ग के रूप में दिखाए जाते हैं।

I have also tried the single notification in json as:
{
    "to" : "...",
    "notification" : {
        "sound": "default",
        "icon" : "myicon"
    },
    "data" : {}
}

लेकिन यह भी वैसा काम नहीं करता जैसा इसे करना चाहिए।

नोटिफिकेशन बैकग्राउंड में आता है लेकिन आवाज नहीं करता है और न ही आइकन दिखाता है।

जब ऐप अग्रभूमि में होता है तो अधिसूचना ठीक से काम करती है, आइकन दिखाती है, ध्वनि के साथ सूचित करती है, जैसा कि आवश्यक है।

क्या कोई इसके साथ मेरी मदद कर सकता है?

1
Aditya Karnik 20 अप्रैल 2017, 13:10

2 जवाब

सबसे बढ़िया उत्तर

अग्रभूमि और पृष्ठभूमि दोनों में अधिसूचना के लिए, केवल data पेलोड का उपयोग करने पर विचार करें। फिर override onMessageReceived विधि आपके custom MessageService class में नीचे एक समाधान है जो मेरे लिए ठीक काम करता है। <कोड> अधिसूचना पेलोड = {"डेटा": { "शीर्षक": "आपका शीर्षक" "शरीर": "आपका शरीर"}}

public class CustomFirebaseMessagingService extends FirebaseMessagingService {
    final String CHANNEL_ID = "YOUR_CHANNEL_ID";//when targeting android-o

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);
    if (remoteMessage.getData().size() > 0) {
        sendNotification(remoteMessage);
    }
}


private void sendNotification(RemoteMessage remoteMessage) {
    Map<String, String> data = remoteMessage.getData();

    String title = data.get("title");
    String message = data.get("body");

    Intent resultIntent = new Intent(this, YOUR_TARGET_ACTIVITY.class);

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

    PendingIntent resultPendingIntent = PendingIntent.getActivity(
            this,
            0,
            resultIntent,
            PendingIntent.FLAG_ONE_SHOT
    );


    Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, CHANNEL_ID)
            .setSmallIcon(R.mipmap.ic_launcher_round)
            .setContentTitle(title)
            .setStyle(new NotificationCompat.BigTextStyle()
                    .bigText(message))
            .setPriority(NotificationCompat.PRIORITY_DEFAULT)
            .setDefaults(NotificationCompat.DEFAULT_ALL)
            .setAutoCancel(true);


    int notificationId = (int) System.currentTimeMillis();
    mBuilder.setSound(alarmSound);
    mBuilder.setContentIntent(resultPendingIntent);


    NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

    if (manager != null) {

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel(CHANNEL_ID,
                    "Human Readable channel id",
                    NotificationManager.IMPORTANCE_DEFAULT);
            channel.setShowBadge(true);
            manager.createNotificationChannel(channel);

        }

        manager.notify(notificationId, mBuilder.build());
    }
}

}

2
Njeru Cyrus 10 अक्टूबर 2018, 21:26

ये कोशिश करें:

@Override
    public void onMessageReceived(RemoteMessage remoteMessage) {

        if (remoteMessage != null && remoteMessage.getData().size() > 0) {

            try {
                JSONObject json = new JSONObject(remoteMessage.getData().toString());
                sendPushNotification(json);
            } catch (Exception e) {
                Log.e(TAG, "Exception: " + e.getMessage());
            }
        }
      }

SendPushNotification विधि

 private void sendPushNotification(JSONObject json) {
        try {
            //getting the json data
            JSONObject data = json.getJSONObject("data");

               //creating MyNotificationManager object
            MyNotificationManager mNotificationManager = new MyNotificationManager(getApplicationContext());

            //creating an intent for the notification

            mNotificationManager.showSmallNotification(title, message, intent);
            OR
            mNotificationManager.showBigNotification(title, message, imageUrl, intent);

        } catch (JSONException e) {
            Log.e(TAG, "Json Exception: " + e.getMessage());
        } catch (Exception e) {
            Log.e(TAG, "Exception: " + e.getMessage());
        }
}

MyNotificationManager वर्ग:

public class MyNotificationManager {

    public int ID_BIG_NOTIFICATION = 234;
    public int ID_SMALL_NOTIFICATION = 235;

    private Context mCtx;

    public MyNotificationManager(Context mCtx) {
        this.mCtx = mCtx;
        ID_BIG_NOTIFICATION = getRandom();
        ID_SMALL_NOTIFICATION = getRandom();
    }

    private int getRandom() {
        Random random = new Random();

        return random.nextInt(99999) + 1;
    }

    //the method will show a big notification with an image
    //parameters are title for message title, message for message text, url of the big image and an intent that will open
    //when you will tap on the notification
    public void showBigNotification(String title, String message, String url, Intent intent) {
        PendingIntent resultPendingIntent =
                PendingIntent.getActivity(
                        mCtx,
                        ID_BIG_NOTIFICATION,
                        intent,
                        PendingIntent.FLAG_UPDATE_CURRENT
                );
        NotificationCompat.BigPictureStyle bigPictureStyle = new NotificationCompat.BigPictureStyle();
        bigPictureStyle.setBigContentTitle(title);
        bigPictureStyle.setSummaryText(Html.fromHtml(message).toString());
        bigPictureStyle.bigPicture(getBitmapFromURL(url));
        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(mCtx);
        Notification notification;
        notification = mBuilder.setSmallIcon(R.mipmap.ic_launcher).setTicker(title).setWhen(0)
                .setAutoCancel(true)
                .setContentIntent(resultPendingIntent)
                .setContentTitle(title)
                .setStyle(bigPictureStyle)
                .setDefaults(Notification.DEFAULT_VIBRATE|Notification.DEFAULT_SOUND|Notification.DEFAULT_LIGHTS)
                .setSmallIcon(R.drawable.ic_app_icon)
                .setLargeIcon(BitmapFactory.decodeResource(mCtx.getResources(), R.drawable.ic_app_icon))
                .setContentText(message)
                .build();

        notification.flags |= Notification.FLAG_AUTO_CANCEL;

        NotificationManager notificationManager = (NotificationManager) mCtx.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(ID_BIG_NOTIFICATION, notification);
    }

    //the method will show a small notification
    //parameters are title for message title, message for message text and an intent that will open
    //when you will tap on the notification
    public void showSmallNotification(String title, String message, Intent intent) {
        PendingIntent resultPendingIntent =
                PendingIntent.getActivity(
                        mCtx,
                        ID_SMALL_NOTIFICATION,
                        intent,
                        PendingIntent.FLAG_UPDATE_CURRENT
                );


        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(mCtx);
        Notification notification;
        notification = mBuilder.setSmallIcon(R.mipmap.ic_launcher).setTicker(title).setWhen(0)
                .setAutoCancel(true)
                .setContentIntent(resultPendingIntent)
                .setContentTitle(title)
                .setSmallIcon(R.drawable.ic_app_icon)
                .setLargeIcon(BitmapFactory.decodeResource(mCtx.getResources(), R.drawable.ic_app_icon))
                .setContentText(message)
                .build();

        notification.flags |= Notification.FLAG_AUTO_CANCEL;

        NotificationManager notificationManager = (NotificationManager) mCtx.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(ID_SMALL_NOTIFICATION, notification);
    }

    //The method will return Bitmap from an image URL
    private Bitmap getBitmapFromURL(String strURL) {
        try {
            URL url = new URL(strURL);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input = connection.getInputStream();
            Bitmap myBitmap = BitmapFactory.decodeStream(input);
            return myBitmap;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}
0
Bhupat Bheda 20 अप्रैल 2017, 13:32