การแจ้งเตือนแบบพุชของ Android: ไอคอนไม่แสดงในการแจ้งเตือนสี่เหลี่ยมสีขาวแสดงแทน


179

แอพของฉันสร้างการแจ้งเตือน แต่ไอคอนที่ฉันตั้งไว้สำหรับการแจ้งเตือนนั้นไม่ปรากฏขึ้น แทนที่จะได้สี่เหลี่ยมสีขาว

ฉันลองปรับขนาด png ของไอคอน (ขนาด 720x720, 66x66, 44x44, 22x22) อยากรู้อยากเห็นเมื่อใช้ขนาดที่เล็กลงสี่เหลี่ยมสีขาวจะเล็กกว่า

ฉันได้ทำการค้นหาปัญหานี้รวมถึงวิธีที่ถูกต้องในการสร้างการแจ้งเตือนและจากสิ่งที่ฉันอ่านรหัสของฉันควรถูกต้อง สิ่งที่น่าเศร้าไม่ใช่สิ่งที่ควรจะเป็น

โทรศัพท์ของฉันคือ Nexus 5 พร้อม Android 5.1.1 ปัญหาก็เกิดขึ้นกับอีมูเลเตอร์ Samsung Galaxy s4 ที่ใช้ Android 5.0.1 และโมโตโรล่าโมโตจีกับ Android 5.0.1 (ซึ่งทั้งคู่ยืมมาและตอนนี้ยังไม่มี)

รหัสสำหรับการแจ้งเตือนดังต่อไปนี้และภาพหน้าจอสองภาพ หากคุณต้องการข้อมูลเพิ่มเติมโปรดอย่าลังเลที่จะสอบถาม

ขอบคุณทุกคน.

@SuppressLint("NewApi") private void sendNotification(String msg, String title, String link, Bundle bundle) {
    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    Intent resultIntent = new Intent(getApplicationContext(), MainActivity.class);
    resultIntent.putExtras(bundle);
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
            resultIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
    Notification notification;
    Uri sound = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.notificationsound);
    notification = new Notification.Builder(this)
                .setSmallIcon(R.drawable.lg_logo)
                .setContentTitle(title)
                .setStyle(new Notification.BigTextStyle().bigText(msg))
                .setAutoCancel(true)
                .setContentText(msg)
                .setContentIntent(contentIntent)
                .setSound(sound)
                .build();
    notificationManager.notify(0, notification);
}

โดยไม่ต้องเปิดการแจ้งเตือน เปิดการแจ้งเตือน



1
นี่คือการแก้ไขstackoverflow.com/a/39142981/1939564
Muhammad Babar

แก้ไขปัญหานี้หรือไม่ ยังฉันกำลังเผชิญปัญหาเดียวกันในแถบสถานะด้านบนยังคงแสดงพื้นที่สีขาวสำหรับการแจ้งเตือนหากฉันเพิ่มภาพโปร่งใส
AngelJanniee

ใช่ฉันแก้ไขด้วยการสร้างไอคอนโปร่งใสหรือกำหนดเป้าหมาย SDK เวอร์ชัน 20 หรือต่ำกว่า หากวิธีนี้ไม่สามารถแก้ไขได้สำหรับคุณบางทีปัญหาที่คล้ายกันของคุณมีสาเหตุอื่น ฉันขอแนะนำให้ตั้งค่าเวอร์ชัน SDK เป้าหมายเป็น 20 และตรวจสอบว่าสิ่งนี้เปลี่ยนแปลงหรือไม่ หากไม่เป็นเช่นนั้นไม่แน่ใจว่าคำถามนี้สามารถช่วยคุณได้อย่างไร:
Blueriver

คำตอบ:


188

สาเหตุ: สำหรับ 5.0 Lollipop "ไอคอนการแจ้งเตือนต้องเป็นสีขาวทั้งหมด"

หากเราแก้ปัญหาไอคอนสีขาวโดยตั้งค่า SDK เป้าหมายเป็น 20 แอพของเราจะไม่กำหนดเป้าหมาย Android Lollipop ซึ่งหมายความว่าเราไม่สามารถใช้คุณลักษณะเฉพาะของ Lollipop ได้

โซลูชันสำหรับเป้าหมาย Sdk 21

หากคุณต้องการสนับสนุนไอคอนวัสดุ Lollipop ให้สร้างไอคอนโปร่งใสสำหรับ Lollipop และรุ่นที่สูงกว่า โปรดอ้างอิงต่อไปนี้: https://design.google.com/icons/

โปรดดูที่http://developer.android.com/design/style/iconography.htmlและเราจะเห็นว่ารูปแบบสีขาวเป็นวิธีแสดงการแจ้งเตือนใน Android Lollipop

ใน Lollipop, Google ยังแนะนำให้เราใช้สีที่จะปรากฏหลังไอคอนการแจ้งเตือนสีขาว อ้างอิงลิงค์: https://developer.android.com/about/versions/android-5.0-changes.html

ทุกที่ที่เราต้องการเพิ่มสี https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#setColor(int)

การใช้งานตัวสร้างการแจ้งเตือนสำหรับรุ่น Lollipop OS ด้านล่างและด้านบนจะเป็น:

Notification notification = new NotificationCompat.Builder(this);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    notification.setSmallIcon(R.drawable.icon_transperent);
    notification.setColor(getResources().getColor(R.color.notification_color));
} else { 
    notification.setSmallIcon(R.drawable.icon);
} 

หมายเหตุ: setColor ใช้ได้เฉพาะใน Lollipop เท่านั้นและจะมีผลกับพื้นหลังของไอคอนเท่านั้น

มันจะแก้ปัญหาของคุณได้อย่างสมบูรณ์ !!


ว้าวขอบคุณ. ฉันคิดว่าพวกเขาควรเป็นสีขาวทั้งหมดเนื่องจากแอพบางตัวที่ฉันมีในโทรศัพท์ของฉันมีไอคอนสี ตอนนี้ฉันเห็นเหตุผล ขอบคุณ!
Blueriver

3
โดยบอกว่าtargetSdkVersion 20คุณช่วยชีวิตฉันไว้! ขอบคุณมาก.
Arshad Ali

11
รูปแบบที่ไม่ดีในการตั้งค่ารุ่นเป้าหมาย SDK เป็น <21 เพียงเพื่อประโยชน์ของไอคอน ดีกว่าที่จะแก้ไขให้ถูกวิธีตามที่อธิบายไว้ในคำตอบนี้: stackoverflow.com/questions/27343202/…
user90766

1
แต่ในพื้นหลังเมื่อ app ไม่ได้อยู่ในสแต็คที่มีการแสดงไอคอนสีขาวว่าจะทำอย่างไรเพื่อให้ได้ผลเหมือนกันในกรณีใด ๆ
Pratik Vyas

1
ฉันลองทุกอย่างแล้ว แต่มันไม่ทำงาน มันยังคงแสดงจุดด้วยการพูดถึงสีในไฟล์รายการ
Harsh Shah

67

หากคุณใช้ Google Cloud Messaging ปัญหานี้จะไม่สามารถแก้ไขได้โดยเพียงแค่เปลี่ยนไอคอนของคุณ ตัวอย่างเช่นสิ่งนี้จะไม่ทำงาน:

 Notification notification  = new Notification.Builder(this)
                .setContentTitle(title)
                .setContentText(text)
                .setSmallIcon(R.drawable.ic_notification)
                .setContentIntent(pIntent)
                .setDefaults(Notification.DEFAULT_SOUND|Notification.DEFAULT_LIGHTS|Notification.DEFAULT_VIBRATE)
                .setAutoCancel(true)
                .build();

แม้ว่า ic_notification จะโปร่งใสและเป็นสีขาว จะต้องกำหนดไว้ในข้อมูลเมตาของรายการเช่น:

  <meta-data android:name="com.google.firebase.messaging.default_notification_icon"

            android:resource="@drawable/ic_notification" />

Meta-data จะอยู่ภายใต้applicationแท็กสำหรับการอ้างอิง


6
ใหญ่ขอบคุณสำหรับคำใบ้กับข้อมูลเมตาในไฟล์ Manifest
Eugen Timm

คุณจะวาง "@ drawable / ic_notification" ได้อย่างไร มันเป็นหนึ่งไอคอน หลายคน? มันคือ PNG
ลุค Pighetti

1
@LukePighetti สามารถมีได้มากหากคุณกำลังอัปโหลดภาพขนาดต่าง ๆ สำหรับความละเอียดหน้าจอหลายรายการ มิฉะนั้นอาจเป็นไฟล์ PNG ไฟล์เดียวในไดเรกทอรีที่คุณวาดได้
Ruchir Baronia

1
@RuchirBaronia ดังนั้นสำหรับตัวอย่างข้างต้นres/drawable/ic_notification.pngขนาด 196x196?
ลุค Pighetti

ขอบคุณ @RuchirBaronia, เพิ่มขึ้นสำหรับMeta-dataคำแนะนำแท็ก
Ravi Vaniya

37

ฉันขอแนะนำให้ปฏิบัติตามหลักเกณฑ์การออกแบบของ Google :

ซึ่งระบุว่า"ไอคอนการแจ้งเตือนจะต้องเป็นสีขาวทั้งหมด"


2
คำตอบของคุณดีกว่าคำตอบที่ฉันยอมรับ หวังว่าฉันจะยอมรับของคุณเช่นกัน ฉันทำไม่ได้ แต่คุณมี +1 และความกตัญญูของฉัน ไชโย!
Blueriver

2
นี่ไม่ใช่คำตอบที่ดีมาก จะเกิดอะไรขึ้นหากผู้มีส่วนได้ส่วนเสียของโครงการจำเป็นต้องกำหนดเป้าหมาย Android 7 ฉันไม่สามารถกำหนดเป้าหมายเวอร์ชัน SDK ใด ๆ ก่อนหน้านั้นได้
Neon Warge

1
ลงคำตอบนี้ผิดเพราะผู้ถามบอกว่าฉันไม่สามารถเรียกใช้แอพของฉันใน sdk21 ได้ คำตอบบอกว่า "อย่าใช้ sdk 21"
Utsav Gupta

1
นี่ไม่ใช่วิธีแก้ปัญหาจริงๆ
Jose Gómez

1
ฉันไม่พบสิ่งใดในแนวทางการออกแบบปัจจุบันที่ระบุว่าไอคอนต้องเป็นสีขาวบนพื้นหลังโปร่งใส โดยไม่คำนึงถึงเอกสารที่ไม่ดีมันก็ยังคงเป็นกรณี
imagio

29

ประกาศรหัสนี้ในรายการ Android:

<meta-data android:name="com.google.firebase.messaging.default_notification_icon" 

android:resource="@drawable/ic_stat_name" />

ฉันหวังว่าสิ่งนี้มีประโยชน์สำหรับคุณ


พุทโธ่! อันนี้เหมาะสำหรับการแจ้งเตือนแบบพุช FCM! ขอบคุณ
Crono

1
ที่คุณจะวางic_stat_name? เป็นหนึ่ง png หรือไม่ มันมีจำนวนมาก? กรุณาช่วย!
ลุค Pighetti

3
@Luke Pighetti ใน Android Studio คลิกขวาที่แอป >> ใหม่ >> เนื้อหารูปภาพ >> ไอคอนประเภท (ประกาศ)
vicky mahale

1
(ฉันรู้ว่ามันมีมานานแล้ว) คุณช่วยอธิบายเรื่องนี้หน่อยได้ไหม? มันควรจะทำอะไร? มันแสดงไอคอนสีไม่โปร่งใสหรือไม่
เอเอฟอี

นี่เป็นคำตอบที่เหมาะสมสำหรับการแจ้งเตือนการส่งข้อความบนคลาวด์ของ firebase
Greg Ellis

11

(Android Studio 3.5)หากคุณเป็น Android Studio เวอร์ชันล่าสุดคุณสามารถสร้างภาพการแจ้งเตือนของคุณได้ คลิกขวาที่โฟลเดอร์ละเอียดของคุณ > New> ภาพสินทรัพย์ จากนั้นคุณจะเห็นกำหนดค่าสินทรัพย์รูปภาพตามที่แสดงในภาพด้านล่าง เปลี่ยนไอคอนประเภทเพื่อไอคอนการแจ้งเตือน รูปภาพของคุณต้องเป็นสีขาวและโปร่งใส นี้กำหนดค่าสินทรัพย์ภาพที่จะบังคับใช้กฎที่ สำคัญ:หากคุณต้องการให้ไอคอนใช้สำหรับการแจ้งเตือนแบบคลาวด์ / พุชคุณต้องเพิ่มเมตาดาต้าใต้แอปพลิเคชันแท็กของคุณเพื่อใช้ไอคอนการแจ้งเตือนที่สร้างขึ้นใหม่กำหนดค่าสินทรัพย์รูปภาพ

  <application>
      ...
      <meta-data android:name="com.google.firebase.messaging.default_notification_icon"
          android:resource="@drawable/ic_notification" />

10

เราสามารถทำเหมือนด้านล่าง:

สร้างวัตถุใหม่ของตัวสร้างการแจ้งเตือนและการโทรsetSmallIcon()โดยใช้วัตถุตัวสร้างการแจ้งเตือนเช่นในรหัสด้านล่าง

สร้างวิธีการที่เราจะตรวจสอบเวอร์ชั่นของระบบปฏิบัติการที่เรากำลังติดตั้งแอพของเรา หากต่ำกว่า Lolipop เช่น API 21 ก็จะใช้ไอคอนแอพปกติที่มีสีพื้นหลังมิฉะนั้นจะใช้ไอคอนแอปโปร่งใสโดยไม่มีพื้นหลังใด ๆ ดังนั้นอุปกรณ์ที่ใช้ระบบปฏิบัติการเวอร์ชัน> = 21 จะตั้งค่าสีพื้นหลังของไอคอนโดยใช้วิธีการsetColor()ของคลาสตัวสร้างการแจ้งเตือน

รหัสตัวอย่าง:

NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this);

notificationBuilder.setSmallIcon(getNotificationIcon(notificationBuilder));

private int getNotificationIcon(NotificationCompat.Builder notificationBuilder) {

   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
             int color = 0x008000;
             notificationBuilder.setColor(color);
             return R.drawable.app_icon_lolipop_above;

    } 
    return R.drawable.app_icon_lolipop_below;
}

ผมได้ทดสอบsetColorบนใช้ KitKat (API 19) และ IceCreamSandwich (API 15) ในกรณีที่ทั้งสองก็ไม่สนใจสี แต่ไม่ได้ผิดพลาด ดังนั้นฉันสามารถละเว้นการตรวจสอบเวอร์ชั่นของระบบปฏิบัติการได้อย่างปลอดภัยหรือไม่?
มาเรีย

10

ลองสิ่งนี้

ฉันกำลังเผชิญกับปัญหาเดียวกันฉันลองใช้คำตอบมากมาย แต่ไม่ได้รับการแก้ไขใด ๆ ในที่สุดฉันก็พบวิธีแก้ปัญหาของฉัน

- สร้างไอคอนการแจ้งเตือนที่มีพื้นหลังโปร่งใสความกว้างและความสูงของแอปจะต้องเป็นขนาดด้านล่างและวางสิ่งเหล่านี้ในโปรเจคของคุณ -> แอป -> src-> main-> res

  • MDPI 24 * 24

  • HDPI 36 * 36

  • XHDPI 48 * 48

  • XXHDPI 72 * 72


หลังจากวางบรรทัดด้านบนนี้ในวิธีการ onMessageReceived ของคุณ


Intent intent = new Intent(this, News.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
                    PendingIntent.FLAG_ONE_SHOT);
            Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
            NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this);
            if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
            {
                notificationBuilder.setSmallIcon(R.drawable.notify)
                                      //            .setContentTitle(title)
                            //                        .setContentText(message)
                        .setAutoCancel(true)
                        .setSound(defaultSoundUri)
                        .setContentIntent(pendingIntent);
            } else
                {
                    notificationBuilder.setSmallIcon(R.drawable.notify)
                       //                                .setContentTitle(title)
                        //                        .setContentText(message)
                            .setAutoCancel(true)
                            .setSound(defaultSoundUri)
                            .setContentIntent(pendingIntent);
            }
            NotificationManager notificationManager =
                    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            notificationManager.notify(0, notificationBuilder.build());

อย่าลืมเพิ่มรหัสนี้ในไฟล์ manifest

<meta-data 
android:name="com.google.firebase.messaging.default_notification_icon" 
android:resource="@drawable/app_icon" />

10
 <meta-data android:name="com.google.firebase.messaging.default_notification_icon"

        android:resource="@drawable/ic_notification" />

เพิ่มบรรทัดนี้ในไฟล์ manifest.xml ในบล็อกแอปพลิเคชัน


7

หากคุณต้องการให้ไอคอนแจ้งเตือนการสนับสนุนอมยิ้มให้ทำไอคอนการแจ้งเตือนสองประเภท:

  1. ไอคอนการแจ้งเตือนปกติ: สำหรับรุ่นอมยิ้มด้านล่าง
  2. ไอคอนการแจ้งเตือนที่มีพื้นหลังโปร่งใส: สำหรับอมยิ้มและรุ่นที่สูงกว่า

ตอนนี้ตั้งค่าไอคอนที่เหมาะสมให้กับตัวสร้างการแจ้งเตือน ณ เวลาทำงานบนเวอร์ชันของระบบปฏิบัติการ:

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    mBuilder.setSmallIcon(R.drawable.ic_push_notification_transperent);
} else {
    mBuilder.setSmallIcon(R.drawable.ic_push_notification);
}

7

ในที่สุดฉันก็มีทางออกสำหรับปัญหานี้

ปัญหานี้เกิดขึ้นเฉพาะเมื่อแอปไม่ได้ทำงานอยู่เลย (ไม่อยู่ในพื้นหลังหรือในเบื้องหน้า) เมื่อแอปทำงานบนพื้นหน้าหรือพื้นหลังไอคอนการแจ้งเตือนจะปรากฏขึ้นอย่างถูกต้อง (ไม่ใช่สี่เหลี่ยมสีขาว)

ดังนั้นสิ่งที่เราต้องตั้งค่าคือการกำหนดค่าเดียวกันสำหรับไอคอนการแจ้งเตือนใน Backend APIs เหมือนกับ Frontend

ในส่วนหน้าเราได้ใช้React พื้นเมืองและสำหรับการแจ้งเตือนผลักดันที่เราเคยใช้ตอบสนองพื้นเมือง FCM แพคเกจ

FCM.on("notification", notif => {
   FCM.presentLocalNotification({
       body: notif.fcm.body,
       title: notif.fcm.title,
       big_text: notif.fcm.body,
       priority: "high",
       large_icon: "notification_icon", // notification icon
       icon: "notification_icon",
       show_in_foreground: true,
       color: '#8bc34b',
       vibrate: 300,
       lights: true,
       status: notif.status
   });
});

เราใช้แพ็คเกจ fcm-push npmโดยใช้Node.jsเป็นแบ็กเอนด์สำหรับการแจ้งเตือนแบบพุชและกำหนดโครงสร้าง payload ดังนี้

{
  to: '/topics/user', // required
  data: {
    id:212,
    message: 'test message',
    title: 'test title'
  },
  notification: {
    title: 'test title',
    body: 'test message',
    icon : 'notification_icon', // same name as mentioned in the front end
    color : '#8bc34b',
    click_action : "BROADCAST"
  }
}

สิ่งที่โดยทั่วไปแล้วจะค้นหาภาพ notification_icon ที่เก็บไว้ในระบบ Android ของเรา


1
ปัญหาของคุณแตกต่างจากของฉันมากแม้ว่ามันจะมีผลเหมือนกัน ขอบคุณที่โพสต์คำตอบนี้อาจจะช่วยให้ใครบางคนใช้สแต็คเทคโนโลยีเดียวกันกับที่คุณใช้อยู่
Blueriver

1
@IanWarburton: ไม่จำเป็น
Aniruddha Shevle

5

การแจ้งเตือนเป็นสีเทาตามที่อธิบายไว้ด้านล่าง พวกเขาไม่ใช่ขาวดำแม้จะมีคนอื่นเขียนไว้ก็ตาม คุณอาจเคยเห็นไอคอนที่มีหลายเฉดสีเช่นแถบความแข็งแรงของเครือข่าย

ก่อนหน้า API 21 (Lollipop 5.0) ไอคอนสีจะใช้งานได้ คุณสามารถบังคับให้แอปพลิเคชันของคุณกำหนดเป้าหมาย API 20 แต่นั่น จำกัด คุณสมบัติที่มีให้กับแอปพลิเคชันของคุณดังนั้นจึงไม่แนะนำ คุณสามารถทดสอบระดับ API ที่ทำงานอยู่และตั้งค่าไอคอนสีหรือไอคอน greyscale ได้อย่างเหมาะสม แต่สิ่งนี้อาจไม่คุ้มค่า ในกรณีส่วนใหญ่ควรใช้ไอคอน greyscale

ภาพมีสี่ช่องทาง RGBA (แดง / เขียว / น้ำเงิน / อัลฟา) สำหรับไอคอนการแจ้งเตือน Android จะละเว้นช่อง R, G และ B ช่องทางเดียวที่นับได้คืออัลฟ่าหรือที่รู้จักกันในชื่อความทึบ ออกแบบไอคอนด้วยเครื่องมือแก้ไขที่ให้คุณควบคุมค่าอัลฟ่าของสีวาดของคุณ

ค่าอัลฟ่าสร้างภาพ greyscale ได้อย่างไร:

  • Alpha = 0 (โปร่งใส) - พิกเซลเหล่านี้โปร่งใสแสดงสีพื้นหลัง
  • Alpha = 255 (ทึบแสง) - พิกเซลเหล่านี้เป็นสีขาว
  • Alpha = 1 ... 254 - พิกเซลเหล่านี้เป็นสิ่งที่คุณคาดหวังโดยให้เฉดสีระหว่างสีโปร่งใสและสีขาว

เปลี่ยนมันด้วยsetColor:

  • โทรNotificationCompat.Builder.setColor(int argb). จากเอกสารสำหรับNotification.color:

    สีที่ถูกเน้น (จำนวนเต็ม ARGB เช่นค่าคงที่ในสี) ที่จะนำไปใช้โดยแม่แบบลักษณะมาตรฐานเมื่อนำเสนอการแจ้งเตือนนี้ การออกแบบเทมเพลตปัจจุบันสร้างภาพส่วนหัวที่มีสีสันโดยการซ้อนภาพไอคอน (stenciled สีขาว) บนฟิลด์ของสีนี้ ส่วนประกอบอัลฟ่าจะถูกละเว้น

    การทดสอบของฉันกับ setColor แสดงให้เห็นว่าส่วนประกอบอัลฟ่าไม่ได้ถูกละเว้น ค่า Alpha ที่สูงขึ้นจะเปลี่ยนเป็นพิกเซลสีขาว ค่า Alpha ที่ต่ำกว่าเปลี่ยนพิกเซลเป็นสีพื้นหลัง (สีดำบนอุปกรณ์ของฉัน) ในพื้นที่แจ้งเตือนหรือเปลี่ยนเป็นสีที่ระบุในการแจ้งเตือนแบบเลื่อนลง


5

ฉันได้แก้ไขปัญหาโดยเพิ่มรหัสด้านล่างเพื่อรายการ

    <meta-data
        android:name="com.google.firebase.messaging.default_notification_icon"
        android:resource="@drawable/ic_stat_name" />

    <meta-data
        android:name="com.google.firebase.messaging.default_notification_color"
        android:resource="@color/black" />

ตำแหน่งที่ic_stat_nameสร้างบน Android Studio คลิกขวาที่ res >> ใหม่ >> สินทรัพย์รูปภาพ >> IconType (การแจ้งเตือน)

และอีกหนึ่งขั้นตอนที่ฉันต้องทำในฝั่ง php ของเซิร์ฟเวอร์พร้อมเพย์โหลดการแจ้งเตือน

$message = [
    "message" => [
        "notification" => [
            "body"  => $title , 
            "title" => $message
        ],

        "token" => $token,

    "android" => [
           "notification" => [
            "sound"  => "default",
            "icon"  => "ic_stat_name"
            ]
        ],

       "data" => [
            "title" => $title,
            "message" => $message
         ]


    ]
];

หมายเหตุส่วน

    "android" => [
           "notification" => [
            "sound"  => "default",
            "icon"  => "ic_stat_name"
            ]
        ]

โดยที่ชื่อไอคอน"icon" => "ic_stat_name"ควรเป็นชุดเดียวกันกับรายการ



4

ฉันพบลิงค์ที่เราสามารถสร้างไอคอนสีขาวของเราเอง

ลองลิงค์นี้เพื่อสร้างไอคอนสีขาวของไอคอนตัวเรียกใช้ของคุณ

เปิดลิงก์นี้และอัปโหลดไอคอน ic_launcher หรือไอคอนแจ้งเตือนของคุณ


1

คุณสามารถใช้ไอคอนที่แตกต่างกันสำหรับเวอร์ชั่นต่าง ๆ เพียงตั้งตรรกะบนไอคอนของคุณเช่นนี้:

int icon = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ? R.drawable.colored_: R.drawable.white_tint_icon_for_lolipop_or_upper;

1

สำหรับ SDK> = 23 โปรดเพิ่ม setLargeIcon

notification = new Notification.Builder(this)
            .setSmallIcon(R.drawable.ic_launcher)
            .setLargeIcon(context.getResources(), R.drawable.lg_logo))
            .setContentTitle(title)
            .setStyle(new Notification.BigTextStyle().bigText(msg))
            .setAutoCancel(true)
            .setContentText(msg)
            .setContentIntent(contentIntent)
            .setSound(sound)
            .build();

1

หากต้องการลดรุ่นที่เฉพาะเจาะจงของ SDK คุณสามารถทำได้ดังนี้: (แทนที่ '#' เป็น '0x')

Notification notification = new NotificationCompat.Builder(this);
notification.setSmallIcon(R.drawable.icon_transperent);
notification.setColor(0x169AB9); //for color: #169AB9

0xFF169AB9คุณไม่มีช่องอัลฟาที่ทึบแสงเต็มที่
Eugen Pechanec

0

เมื่อคุณต้องการให้ไอคอนมีสีสัน - วิธีแก้ปัญหา
เพิ่มพิกเซลด้วยสีที่แตกต่างกันเล็กน้อยในไอคอน
ในกรณีของฉันมีไอคอนสีดำพร้อมเฉดสีและแสง เมื่อเพิ่มพิกเซลสีน้ำเงินเข้มมันจะทำงาน


0

ฉันมีปัญหาที่คล้ายกันใน Android 8.0 ลองใช้ทรัพยากรไอคอน WHITE ฉันมีสี่เหลี่ยมสีขาวเมื่อฉันพยายามใช้รูปสีสำหรับไอคอนเมื่อฉันแทนที่เป็นไอคอนสีขาวมันเริ่มทำงาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.