更新记录

1.0.0(2023-07-13)

插件功能包含新建/更新通知、删除单个/全部通知、设置通知大图、通知级别、通知权限获取等


平台兼容性

Android Android CPU类型 iOS
适用版本区间:4.4 - 12.0 armeabi-v7a:支持,arm64-v8a:支持,x86:未测试 适用版本区间:9 - 16

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


如遇问题请提供详细信息如系统版本和型号、复现步骤、代码片段等

部分参数和方法因各平台差异,请阅读并了解文档后使用,使用前请勾选manifest.json-App模块配置-Push(消息推送)

安卓端targetSdkVersion为>=33时,需要额外申请权限,否则通知设置的开关按钮是禁用状态或打开无效,解决方法参考:https://ask.dcloud.net.cn/article/40691

导入插件

const syczuanNotice = uni.requireNativePlugin("syczuan-notice");

使用方式

此插件为原生模块,需要先引入模块,使用参考如下

index.nvue
<template>
  <view class="notice_content">
    <view class="notice_list">
      <text class="notice_btn" @click="sendNotice">发送通知</text>
      <text class="notice_btn" @click="deleteNotice">删除单个通知</text>
      <text class="notice_btn" @click="deleteAllNotice">删除全部通知</text>
      <text class="notice_btn" @click="getNoticePermissions">获取通知权限状态</text>
      <text class="notice_btn" @click="openSetting">打开通知设置</text>
      <text class="notice_btn" @click="setBadge">设置角标数</text>
      <text class="notice_btn" @click="getNotice">获取通知栏列表</text>
    </view>
  </view>
</template>
<script>
const syczuanNotice = uni.requireNativePlugin("syczuan-notice");
export default {
  data() {
    return {};
  },
  methods: {
    // 发送通知
    sendNotice() {
      syczuanNotice.send(
        {
          // 唯一通知id,用于更新、取消通知
          noticeId: 1,
          // 通知渠道id 需唯一
          channalId: "Default_id",
          // 通知渠道名称 需唯一
          channalName: "Default",
          // 通知标题
          title: "通知标题",
          // 通知内容
          content: "通知内容",
          // 通知栏附加文本
          subText: "通知栏附加文本",
          // 大图标
          largeIcon: true,
          // 小图标背景颜色
          smallColor: "#000000",
          // 大图(禁止传空字符)
          bigPicture: "网络地址、绝对路径、static/image目录下",
          // 点击是否自动关闭通知
          autoCancel: true,
          // 毫秒时间戳 默认显示当前时间
          noticeTime: true,
          // 通知优先级
          import: 0,
          // 常驻状态栏
          ongoing: false,
          // 未读通知数 0不显示
          badge: 1,
          // 延迟通知时间(单位s)
          trigger: 1,
          // 通知长文本
          bigText: "",
          // 自定义按钮
          customButton: "Custom",
          // 自定义数据
          payload: {
            pages: "/pages/index/test",
            type: "default",
          },
        },
        (e) => {
          console.log(e);
        }
      );
    },
    // 删除单个通知
    deleteNotice() {
      syczuanNotice.delete(1);
    },
    // 删除全部通知
    deleteAllNotice() {
      syczuanNotice.deleteAll();
    },
    // 获取通知权限
    getNoticePermissions() {
      const info = syczuanNotice.determinePermissions();
      console.log(info);
    },
    // 打开通知设置
    openSetting() {
      syczuanNotice.openSetting();
    },
    // 设置角标数
    setBadge() {
      syczuanNotice.setBadge(10);
    },
    // 获取通知列表
    getNotice() {
      const info = syczuanNotice.getNoticeList();
      console.log(info);
    },
  }
};
App.vue
<script>
export default {
  onLaunch: function () {
    this.handlerLaunchMsg();

    console.log("应用启动");
  },
  onShow: function () {
    console.log("进入前台");
  },
  onHide: function () {
    console.log("进入后台");
  },
  methods: {
    // 打开app对应页面
    openAppPages(data) {
      if (data?.payload?.pages) {
        const { type, pages } = data.payload;
        switch (type) {
          case "new":
            uni.redirectTo({
              url: pages,
            });
            break;
          case "tabBar":
            uni.switchTab({
              url: pages,
            });
            break;
          default:
            console.log(pages);
            uni.navigateTo({
              url: pages,
            });
            break;
        }
      } else {
        console.log("页面数据不存在");
      }
    },
    // 获取runtime.arguments信息
    getArgumentsMsg() {
      const args = plus.runtime.arguments;
      if (args) {
        try {
          const data = JSON.parse(args);
          // 在此处理点击通知后的操作
          if (data.syczuanNotice) {
            const dataJson = JSON.parse(data.syczuanNotice);
            this.openAppPages(dataJson);
          }
          // 在此处理点击自定义按钮后的操作,如清除通知
          else if (data.syczuanNoticeButton){
             const dataButtonJson = JSON.parse(data.syczuanNoticeButton);
          }
        } catch (error) {}
      }
    },
    // 处理Launch信息
    handlerLaunchMsg() {
      const platform = uni.getSystemInfoSync().platform;
      switch (platform) {
        case "ios":
          uni.onPushMessage((res) => {
            if (res?.data?.payload?.syczuanNotice) {
              const dataJson = res.data.payload.syczuanNotice;
              this.openAppPages(dataJson);
            }
          });
          break;
        case "android":
          // app未在后台时
          this.getArgumentsMsg();
          // app在后台时
          plus.globalEvent.addEventListener("newintent", (e) => {
            this.getArgumentsMsg();
          });
          break;
        default:
          break;
      }
    },
  },
};
</script>

获取通知权限状态

syczuanNotice.determinePermissions()
返回参数Object:
对象属性 类型 说明
type Boolean 权限是否开启
msg String authorized: 允许接收通知
denied: 不允许接收通知
[仅iOS] undetermined: 用户未对打开通知提示做回应
[仅iOS] provisional: 临时授权发布通知
[仅iOS,>=14.0] ephemeral: 被授权在有限的时间内接收通知

打开通知设置

syczuanNotice.openSetting()


发送/更新通知

安卓端通知小图标自定义: 将自定义通知小图标命名为pushicon.png,然后放置在项目根目录的nativeplugins/syczuan-notice/android/res/mipmap-xxhdpi文件夹下,文件夹不存在时则一级一级新建。完成后需要重新制作自定义基座才能生效。

通知小图标制作: 建议使用512x512透明底,纯白内容,否则会导致显示白色方块,纯白内容颜色会随系统自动变换(系统控制),配合smallColor设置背景颜色,顶部状态栏中不显示smallColor

syczuanNotice.send(Object,Callback)

Object 参数说明:
参数 参数类型 是否必填 默认值 说明
noticeId [Number] - 通知id
传入:当前通知列表中存在此id则更新,否则新建
不传:每次调用新建通知
如果需要传入id自己控制新建通知,建议最大不超过9位正整数
title [String] - 通知标题
content [String] - 通知内容
subText [String] - 通知栏附加文本
channalId [String] Default_id [仅Android] 通知通道id,与channalName参数保持对应
channalName [String] Default [仅Android] 通知通道名称,与channalId参数保持对应,用于用户对通知分类管理,具体查看app通知设置页
largeIcon [String,Boolean] false [仅Android] 通知大图标
true: app图标
false: 不显示
String支持::
通过plus.io.convertLocalFileSystemURL(filePath)转换后的绝对路径
放置在根目录static/images下的相对路径,如: static/images/xxx.png
bigPicture [String] - 通知内容下方显示大图
支持:
通过plus.io.convertLocalFileSystemURL(filePath)转换后的绝对路径
放置在根目录static/images下的相对路径,如: static/images/xxx.png
smallColor [String] #000000 [仅Android] 通知小图标背景颜色,下拉状态栏中通知小图标背景色 自定义通知小图标
autoCancel [Boolean] true [仅Android] 点击通知后是否允许自动清除此条通知
noticeTime [Boolean,Number] true [仅Android] 通知中显示的时间
true: 以当前时间为准
false: 不显示时间
Number: 以13位毫秒时间戳为准
import [Number] 0 [iOS>=15.0] 通知优先级,由于安卓和iOS两端规则并不统一,只有0、1下的行为勉强相同,正常情况下建议直接使用默认值0,详情请查看文档及对照表 点击查看
ongoing [Boolean] false [仅Android] 是否允许手动删除通知
mute [Boolean] false [仅iOS,<10.0] 通知静音
customButton [String] - [仅Android] 自定义通知底部按钮文本,默认不显示(点击按钮不会自动清除通知,如需清除则在App.vue中通过plus.runtime.arguments接收参数,调用delete方法手动清除,具体用法查看示例)
badge [Number] 0 app图标角标通知数,安卓端由于厂商定制较多,可能没有效果
bigText [String] - [仅Android] 通知长文本,与bigPicture只能同时设置一种,两个同时设置时仅显示bigText
trigger [Number] - [仅iOS] 延迟通知时间整数(单位s)
payload [Object] - 点击通知和自定义通知底部按钮后app接收参数,通过plus.runtime.arguments接收,具体用法查看示例
Callback返回参数Object:
对象属性 类型 说明
status [Number] 发送状态码
200: 发送成功
400: 发送失败
data [Object,String] data.noticeId: 通知id
data.payload: 发送时的payload数据
msg [String] 发送状态提示

根据noticeId删除单个通知

iOS>=10.0

syczuanNotice.delete(noticeId)


删除全部通知

iOS中包括等待中的通知

syczuanNotice.deleteAll()


仅删除全部等待中的通知

[仅iOS iOS>=10.0]

syczuanNotice.deletePendingAll()


设置角标数

[仅iOS]

syczuanNotice.setBadge(1)


获取通知列表

iOS>=10.0

syczuanNotice.getNoticeList ()

返回参数Array<Object>:
对象属性 类型 说明
noticeId Number 通知id
title String 通知标题
content String 通知内容
subText String 通知附加文本
date String 通知创建时间,格式yyyy-MM-dd HH:mm:ss

send方法import参数对照表

安卓参考文档:https://developer.android.google.cn/reference/kotlin/android/app/NotificationManager#importance_default

iOS参考文档:https://developer.apple.com/documentation/usernotifications/unnotificationinterruptionlevel?language=objc

import 安卓端 iOS端
0 IMPORTANCE_HIGH UNNotificationInterruptionLevelActive
1 IMPORTANCE_MIN UNNotificationInterruptionLevelPassive
2 IMPORTANCE_LOW UNNotificationInterruptionLevelTimeSensitive
3 IMPORTANCE_DEFAULT UNNotificationInterruptionLevelCritical

隐私、权限声明

1. 本插件需要申请的系统权限列表:

通知权限

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问