IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> SwiftUI——推送通知(Notifications)二三事 -> 正文阅读

[移动开发]SwiftUI——推送通知(Notifications)二三事

有很多需要推送通知的情况,但是关于SwiftUI的通知推送说的人却不多,这里就说一些相关内容。一方面是为了自己能以后再查阅,另外一方面也是想能帮到有需要的人。

本文将讲述:

  1. 基础款推送(最常见的通知)
  2. 定时型推送(例如闹铃,纪念日等)

在讲述具体操作之前,需要注意一点:通知不能出现在app打开的时候。测试的时候使用模拟器或者实机测试,按完按钮要退出app一下。

基础款推送

首先来讲述一下最基础的推送,也是最常用的。样式如下:
请添加图片描述
代码如下:

import SwiftUI
import UserNotifications

//询问用户是否允许该app推送通知
//由于推送系统中类型蛮多的,可以自己去“设置”中研究一下。这里的.alert表示是否允许弹窗; .sound表示是否允许提示音;.badge表示通知弹窗中的那个小图。
func setNotification(){
    UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]){ (granted, _) in
        if granted {
            //用户同意我们推送通知
            print("用户同意我们推送通知")
        }else{
            //用户不同意
            print("用户不同意")
        }
    }
}

//推送通知
func makeNotification(){
    //设置通知的触发器:5秒后触发推送(这种通知推送不能重复)
    let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
    
    //通知的内容
    let content = UNMutableNotificationContent()
    content.title = "通知的标题"
    content.body = "通知的内容"
    /* 通知提示音,default是“叮~”,就是短信的提示音。还有个defaultCritical,就是一般app推送通知的声音 */
    content.sound = UNNotificationSound.default 
    
    //完成通知的设置
    let request = UNNotificationRequest(identifier: "通知名称", content: content, trigger: trigger)
    //添加我们的通知到UNUserNotificationCenter推送的队列里
    UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
}

struct ContentView: View {
    var body: some View {
        VStack {
            Button(action: {
                setNotification()
            }) {
                Text("获取推送权限")
                    .padding()
            }
            Button(action: {
                makeNotification()
            }) {
                Text("推送通知")
                    .padding()
            }
        }
    }
}

定时推送通知

有时候闹钟或者To-Do类型的软件需要定时推送通知,样式和实现基础款差不多,只是触发器和提示音部分有点区别(需要注意这个自定义的提示音不能超过30秒,不然系统会播放默认声音),代码如下:

import SwiftUI
import UserNotifications

func setNotification(){
    UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]){ (granted, _) in
        if granted {
            //用户同意我们推送通知
            print("用户同意我们推送通知")
        }else{
            //用户不同意
            print("用户不同意")
        }
    }
}

//推送通知
func makeNotification(){
    //设置通知的时间:推送时间为6点30分
    var dateComponents = DateComponents()
    dateComponents.hour = 6
    dateComponents.minute = 30
    //这里最后让repeats为true表示每天的6点30分都会推送通知
    let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true)
    
    //通知的内容
    let content = UNMutableNotificationContent()
    content.title = "通知的标题"
    content.body = "通知的内容"
    /* 需要注意这个自定义的提示音不能超过30秒,不然系统会播放默认声音 */
    content.sound = UNNotificationSound.init(named: UNNotificationSoundName("ring.m4a"))
    
    //完成通知的设置
    let request = UNNotificationRequest(identifier: "通知名称", content: content, trigger: trigger)
    //添加我们的通知到UNUserNotificationCenter推送的队列里
    UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
}

struct ContentView: View {
    var body: some View {
        VStack {
            Button(action: {
                setNotification()
            }) {
                Text("获取推送权限")
                    .padding()
            }
            Button(action: {
                makeNotification()
            }) {
                Text("推送通知")
                    .padding()
            }
        }
    }
}

我们还可以调整通知音量等等属性,自己可以看看哦~

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-02-09 20:49:02  更:2022-02-09 20:50:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 15:00:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码