golang实现OSX桌面通知功能的插件库gosx-notifier的使用

golang实现OSX桌面通知功能的插件库gosx-notifier的使用

gosx-notifier是一个Go语言库,用于向OSX Mountain Lion(10.8或更高版本)的通知中心发送桌面通知。

功能特点

  • 支持在OSX 10.8及以上版本发送通知
  • 10.9及以上版本支持图片和图标
  • 简单易用的API
  • 无外部依赖

安装

使用以下命令安装gosx-notifier库:

go get github.com/deckarep/gosx-notifier

基本使用示例

package main

import (
    "github.com/deckarep/gosx-notifier"
    "log"
)

func main() {
    // 至少需要指定要显示给用户的消息
    note := gosxnotifier.NewNotification("检查你的苹果股票!")

    // 可选:设置标题
    note.Title = "赚钱时间到 💰"

    // 可选:设置副标题
    note.Subtitle = "我的副标题"

    // 可选:从预定义集合中设置声音
    note.Sound = gosxnotifier.Basso

    // 可选:设置组,确保只显示一个通知,替换相同组ID的先前通知
    note.Group = "com.unique.yourapp.identifier"

    // 可选:设置发送者(通知现在将使用Safari图标)
    note.Sender = "com.apple.Safari"

    // 可选:指定点击通知时要打开的URL或bundleid
    note.Link = "http://www.yahoo.com" // 或像 com.apple.Terminal 这样的BundleID

    // 可选:应用图标(仅限10.9+)
    note.AppIcon = "gopher.png"

    // 可选:内容图片(仅限10.9+)
    note.ContentImage = "gopher.png"

    // 然后推送通知
    err := note.Push()

    // 如有必要,检查错误
    if err != nil {
        log.Println("出错了!")
    }
}

实际应用示例:网站监控通知

package main

import (
    "github.com/deckarep/gosx-notifier"
    "net/http"
    "strings"
    "time"
)

// 要监控的网站列表
var sites []string = []string{
    "http://www.yahoo.com",
    "http://www.google.com",
    "http://www.bing.com"}

func main() {
    ch := make(chan string)

    for _, s := range sites {
        go pinger(ch, s)
    }

    for {
        select {
        case result := <-ch:
            if strings.HasPrefix(result, "-") {
                s := strings.Trim(result, "-")
                showNotification("紧急,无法ping通网站: " + s)
            }
        }
    }
}

func showNotification(message string) {
    note := gosxnotifier.NewNotification(message)
    note.Title = "网站宕机"
    note.Sound = gosxnotifier.Default
    note.Push()
}

// 网站前缀为+表示正常,-表示宕机
func pinger(ch chan string, site string) {
    for {
        res, err := http.Get(site)

        if err != nil {
            ch <- "-" + site
        } else {
            if res.StatusCode != 200 {
                ch <- "-" + site
            } else {
                ch <- "+" + site
            }
            res.Body.Close()
        }
        time.Sleep(30 * time.Second)
    }
}

使用场景建议

  • 监控服务器集群,当出现问题时推送通知
  • 抓取Hacker News寻找特定关键词的文章并推送通知
  • 监控股票表现,在亏损前推送通知
  • 连接到ifttt.com,当家中运动传感器触发时推送通知

许可证

该项目采用双重许可:基于底层应用的许可以及Go版本的MIT许可。


更多关于golang实现OSX桌面通知功能的插件库gosx-notifier的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang实现OSX桌面通知功能的插件库gosx-notifier的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


使用gosx-notifier实现OSX桌面通知功能

gosx-notifier是一个Go语言库,用于在macOS系统上发送本地桌面通知。下面我将详细介绍如何使用这个库。

安装gosx-notifier

首先,使用go get命令安装gosx-notifier:

go get github.com/deckarep/gosx-notifier

基本使用示例

package main

import (
	"log"
	"github.com/deckarep/gosx-notifier"
)

func main() {
	// 创建一个新的通知
	note := gosxnotifier.NewNotification("这是通知标题")

	// 设置通知内容
	note.Title = "系统提醒"
	note.Subtitle = "重要消息"
	note.Message = "您的任务已完成,请查看详情。"
	note.Sound = gosxnotifier.Default // 使用默认提示音

	// 可以设置应用图标
	note.AppIcon = "/Applications/Calendar.app/Contents/Resources/Calendar.icns"

	// 可以设置点击通知时的回调URL
	note.Link = "https://github.com/deckarep/gosx-notifier"

	// 发送通知
	err := note.Push()
	if err != nil {
		log.Fatal("发送通知失败:", err)
	}
}

高级功能

1. 自定义通知声音

note.Sound = gosxnotifier.Basso // 使用特定声音
// 可用的声音类型包括: Basso, Blow, Bottle, Frog, Funk, Glass, Hero, Morse, Ping, Pop, Purr, Sosumi, Submarine, Tink

2. 添加按钮和响应

note.Group = "com.mycompany.myapp.notifications" // 设置通知分组
note.Sender = "com.apple.Safari" // 可以伪装成其他应用发送通知

// 添加操作按钮
note.Actions = []string{"查看详情", "忽略"}

// 处理用户响应
note.Reply = func(response string) {
    if response == "查看详情" {
        fmt.Println("用户点击了查看详情")
    } else if response == "忽略" {
        fmt.Println("用户选择忽略通知")
    }
}

3. 定时发送通知

// 设置5秒后发送通知
note.DeliverAfter = time.Now().Add(5 * time.Second)

4. 使用自定义图标

// 使用自定义图标文件
note.ContentImage = "/path/to/your/image.png"

完整示例:带按钮和回调的通知

package main

import (
	"fmt"
	"log"
	"time"
	
	"github.com/deckarep/gosx-notifier"
)

func main() {
	note := gosxnotifier.NewNotification("任务完成提醒")
	
	note.Subtitle = "数据库备份"
	note.Message = "数据库备份任务已于" + time.Now().Format("15:04") + "完成。"
	note.Sound = gosxnotifier.Ping
	note.Group = "com.example.backup.notifications"
	
	// 添加操作按钮
	note.Actions = []string{"查看日志", "立即同步", "稍后提醒"}
	
	// 处理用户响应
	note.Reply = func(response string) {
		switch response {
		case "查看日志":
			fmt.Println("打开日志文件...")
		case "立即同步":
			fmt.Println("开始同步数据...")
		case "稍后提醒":
			fmt.Println("将在30分钟后再次提醒...")
		}
	}
	
	// 发送通知
	if err := note.Push(); err != nil {
		log.Fatal("通知发送失败:", err)
	}
	
	// 保持程序运行以接收回调
	time.Sleep(30 * time.Second)
}

注意事项

  1. gosx-notifier只能在macOS系统上工作
  2. 需要为应用程序启用通知权限
  3. 如果使用自定义图标,需要确保路径正确
  4. 回调功能需要保持程序运行才能接收到用户响应

这个库提供了一种简单的方式来为你的Go应用程序添加macOS原生通知功能,非常适合需要向用户发送提醒或状态更新的应用程序。

回到顶部