一、需求背景

1.1 背景描述

通知图标可做为一个应用的标识,方便在手机通知栏显示应用的通知推送消息,也便于用户在第一时间辨识是哪个应用都消息做出对应的消息处理。

如果需要根据不同推送场景进行推送,还可以设置多套图标区分应用场景。

比如:微信和QQ是通讯工具,通知栏收到微信或者QQ的消息后,通知中心会在消息文本前显示微信或者QQ的图标,方便第一时间处理通讯消息。

1.2 名称解释

名词 解释
小图标push_small.png 会展示在顶部状态栏和通知左上角位置,push_small 只能内置, 不能修改
通知图标push.png 将会作为通知展示图标,会展示在通知内容右侧。

image-20230424160635179

1.3 各渠道支持情况

渠道 小图标(push_small.png) 右侧通知图标(push.png)
个推 支持 支持
APNs 支持 支持
华为 支持 支持
荣耀 支持 支持
小米 支持 支持
魅族 支持 不支持
OPPO 支持 支持
VIVO 支持 不支持

二、技术实现方案

  • Android 在线个推通道支持设置小图标push_small.png和右侧通知图标push.png;

​ 离线厂商通道左上角小图标默认会显示为app的icon,右侧通知图标华为、小米、oppo、荣耀支持配置(详细可看下各厂商富文本处理)。

  • iOS在线需要走透传渠道,暂不支持动态设置小图标和通知图标;离线apns通道可通过多媒体设置通知图标。
  • 开发者可通过调用 个推服务端 api 或者直接从 个推开发者中心 页面推送。

Android 实现

1.1 个推通道

(1)客户端

设置通知栏及通知栏顶部图标 :

  • 务必在资源目录的 res/drawable-ldpi/、res/drawable-mdpi/、res/drawable-hdpi/、res/drawable-xhdpi/、res/drawable-xxhdpi/ 等各分辨率目录下,放置相应尺寸的文件名为 push.png 和 push_small.png 的图片(该图片内容为您应用自定义的图标文件)。
  • push_small.png 会展示在顶部状态栏和通知左上角位置,push_small 只能内置, 不能修改。**push_small.png 设计规范有以下四个注意要点:1. 必须是带 Alpha 透明通道的 PNG 图片。 2.背景必须是透明的。 3.图形必须是白色。 4. 周围不宜留过多的 padding。**
  • push.png 将会作为右侧通知展示图标(仅在服务端在线推送使用 logo 时,需要客户端内置 push.png 图片资源。服务端使用 logo_url 时,不需要客户端内置。
资源目录文件夹:

Getui_SDK_Demo_AS_official/
|- app/
| |- src/
| |- main/
| |- res/
| |- drawable-hdpi/
| |- push.png
| |- push_small.png
| |- drawable-ldpi/
| |- push.png
| |- push_small.png
| |- drawable-mdpi
| |- push.png
| |- push_small.png
| |- drawable-xhdpi
| |- push.png
| |- push_small.png
| |- drawable-xxhdpi
| |- push.png
| |- push_small.png
| ......

//push.png 图片尺寸
ldpi: 48*48
mdpi: 64*64
hdpi: 96*96
xhdpi: 128*128
xxhdpi: 192*192

//push_small.png 图片尺寸
ldpi: 18*18
mdpi: 24*24
hdpi: 36*36
xhdpi: 48*48
xxhdpi: 72*72
xxxhdpi: 96*96

(2)服务端api

小图标push_small.png

只支持客户端嵌入,服务端暂不支持动态推送时设置小图标。

通知图标push.png

如果您需要根据不同推送场景切换不同通知栏图标或者其他配置多套通知栏图标的场景

  • 先在资源目录的 res/drawable-ldpi/、res/drawable-mdpi/、res/drawable-hdpi/、res/drawable-xhdpi/、res/drawable-xxhdpi/ 等各分辨率目录下放置相应的多套通知图标,例如 push1.pngpush2.png等
  • 通过服务端推送 API参数指定通知栏图标名称,如:

notification

名称 类型 是否必需 默认值 描述
title String 通知消息标题,长度 ≤ 50
body String 通知消息内容,长度 ≤ 256
logo String 通知的图标名称,包含后缀名(需要在客户端开发时嵌入),如“push.png”,长度 ≤ 64
logo_url String 通知图标URL地址(不需要客户端嵌入),长度 ≤ 256字。logo 和 logo_url 字段二选一即可。
在线个推通道:
{
    "push_message":{
        "notification":{
            "title":"请填写你的通知标题",
            "body":"请填写你的通知内容",
            "logo_url":"http://xxxx/a.png",
            "click_type":"startapp"
        }
    }
}

(3)个推开发者中心下发

1.2 华为离线通道

(1)服务端:

【华为】富文本消息:https://docs.getui.com/getui/server/rest_v2/third_party/

Options参数说明:
参数示例
{
  "android": {
    "ups": {
      "notification": {
        // ...其他push_channel参数略
      },
      "options": {
        "HW": {
          "/message/android/notification/image": "公网可以访问的https图标链接"
        }
      }
    }
  }
}
  • key 说明
名称 类型 是否必须 默认值 描述
/message/android/notification/image String 通知小图; value:请写入对应图标https地址 URL使用的协议必须是HTTPS协议,取值样例:https://example.com/image.png。

(2)个推开发者中心下发

1.3 荣耀通道

(1)服务端

【荣耀】富文本消息:https://docs.getui.com/getui/server/rest_v2/third_party/

通知栏样式设置

Options参数说明:

参数示例
{
  "android": {
    "ups": {
      "notification": {
        // ...其他push_channel参数略
      },
      "options": {
        "HO": {
          "/android/notification/icon":"左侧小图标",
          "/android/notification/image": "公网可以访问的https图标链接"
        }
      }
    }
  }
}
  • key 说明
名称 类型 是否必须 默认值 描述
/android/notification/icon String 自定义通知栏左侧小图标,此处设置的图标文件必须存放在应用的/res/raw路径下,例如"/raw/ic_launcher",对应应用本地的"/res/raw/ic_launcher.xxx"文件,支持的文件格式目前包括PNG、JPG。
/android/notification/image String 通知右侧小图标; value:请写入对应图标https地址 URL使用的协议必须是HTTPS协议,取值样例:https://example.com/image.png。 图标文件须小于512KB,图标建议规格大小:40dp x 40dp,弧角大小为8dp,超出建议规格大小的图标会存在图片压缩或显示不全的情况。 资讯营销类消息不支持右侧小图即importance=LOW时不生效

(2)个推开发者中心下发:

1.4 小米通道

(1)服务端

【小米/小米海外】富文本消息:https://docs.getui.com/getui/server/rest_v2/third_party/

先调用小米接口,上传图片,获取图片url。

Java方式 参考(小米官方文档) 4.4.1 大图/大文本/Large icon,或者集成个推多厂商推送工具集

Options参数说明:
参数示例
{
  "android": {
    "ups": {
      "notification": {
        // ...其他push_channel参数略
      },
      "options": {
        "XM": {
          "/extra.notification_large_icon_uri":"http://url.big.pic/xxx.png"
        },
        "XMG": {
          "/extra.notification_large_icon_uri":"http://url.big.pic/xxx.png"
        }
      }
    }
  }
}
  • key 说明
名称 类型 是否必须 默认值 描述
/extra.notification_large_icon_uri String 通知小图; value:填写接口返回的图片链接。 Large icon可以出现在大图版和多字版消息中,显示在右边,通知小图。图片要求:尺寸必须为 120×120px,文件小于200KB,PNG/JPG/JPEG格式。

注意事项:
1.富文本消息仅在MIUI10及以上版本支持,在低版本和非MIUI系统上,消息将按照普通消息的样式展示;
2.国内版MIUI系统中,仅在MIUI12及以上版本支持large icon,MIUI12以下版本不会展示;

(2)个推开发者中心下发:

1.5 oppo通道

(1)服务端:

【OPPO】富文本消息:https://docs.getui.com/getui/server/rest_v2/third_party/

先调用OPPO接口,上传图片,获取图标url。

Java方式集成个推多厂商推送工具集

RestAPI 参考 “图片上传”

Options参数说明:
参数示例
{
  "android": {
    "ups": {
      "notification": {
        // ...其他push_channel参数略
      },
      "options": {
        "OP": {
          "/small_picture_id": "xxxxxxxxxxxxxxx"
        }
      }
    }
  }
}
  • key 说明
名称 类型 是否必须 默认值 支持单推 描述
/small_picture_id String 通知小图; value: 填写接口返回的图标ID 图片要求:尺寸144*144 px,文件大小为50k以内,格式为PNG/JPG/JPEG。

注意事项:
通知小图标、大图不支持单推,单推请求会返回无权限错误

(2)个推开发者中心下发:

iOS 实现

2.1 客户端

支持版本:

ios10以上的系统

客户端设置

  • 在集成个推SDK时,可以添加 Notification Service Extension,实现多媒体展示,详细配置可见文档第6点。

涉及代码:

- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {

    self.contentHandler = contentHandler;
    self.bestAttemptContent = [request.content mutableCopy];

    NSLog(@"----将APNs信息交由个推处理----");

    [GeTuiExtSdk handelNotificationServiceRequest:request withAttachmentsComplete:^(NSArray *attachments, NSArray* errors) {

        //注意:是否修改下发后的title内容以项目实际需求而定
        //self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [需求而定]", self.bestAttemptContent.title];

        self.bestAttemptContent.attachments = attachments; //设置通知中的多媒体附件

        NSLog(@"个推处理APNs消息遇到错误:%@",errors); //如果APNs处理有错误,可以在这里查看相关错误详情

        self.contentHandler(self.bestAttemptContent); //展示推送的回调处理需要放到个推回执完成的回调中
    }];
}

2.2 服务端设置

multimedia说明

该字段为Array类型,最多可设置3个子项,每个参数定义如下所示:

名称 类型 是否必需 默认值 描述
url String 多媒体资源地址
type Number 资源类型(1.图片,2.音频,3.视频)
only_wifi Boolean false 是否只在wifi环境下加载,如果设置成true,但未使用wifi时,会展示成普通通知
apns通知消息

{
    "ios":{
        "type":"notify",
        "payload":"自定义消息",
        "aps":{
            "alert":{
                "title":"通知标题",
                "body":"通知内容"
            },
            "content-available":0,
            "sound":"com.gexin.ios.silence",
            "category":"ACTIONABLE"
        },
        "auto_badge":"+1",
        "multimedia": [{
            "url": "https://xxx",
            "type": 1,
            "only_wifi": false
        }]
    }
}

2.3 个推开发者中心后台设置下发:

三、常见FAQ

Q1: 左上角小图标显示为灰色

  • 谷歌原生 Android 5.0 以上的 ROM 都会对 target sdk 大于等于 21 的 App 的小图标进行处理,增加一层颜色,导致图标变灰。推送在线个推通道信息显示灰色建议检查下push_small.png的格式,请严格按照要求格式制作图片,并将 res 文件夹下的push_small.png都替换成自己的图标文件。
  • 由于部分系统(一加手机、google 手机 android10 系统等)对图标有限制,目前无法处理。
  • 小米手机的 launcher 可能有缓存,按照上述要求配置好后, 需 重启手机 后再测试。
  • 小米手机无论走个推通道还是小米通道,都需要切换到原生样式才可以生效。

img

开发者中心 SDK 下载

文档中心搜索

技术
咨询

微信扫一扫

随时联系技术支持

在线
咨询