主页 Bark服务端部署文档
Post
Cancel

Bark服务端部署文档

For English

Bark是啥?

https://www.v2ex.com/t/467407
使用教程

隐私保护:

如果你的数据特别敏感,请将Bark部署到私人服务器。
所有的数据将只在 你的手机、你的服务器、Apple推送服务器之间传输。

历史消息通过 NotificationServiceExtension 扩展,在收到推送时将推送信息保存在本地,不会经过其他任何设备。
历史记录仅由个人iCloud私有库进行同步。
可以确保你产生的任何通知,将只留在你的设备与你的iCloud中

安装:

  • Docker
    1
    
    docker run -dt --name bark -p 8080:8080 -v `pwd`/bark-data:/data finab/bark-server
    
  • Docker-Compose
    1
    2
    3
    
    mkdir bark && cd bark
    curl -sL https://git.io/JvSRl > docker-compose.yaml
    docker-compose up -d
    
  • 手动安装
  1. 根据平台下载可执行文件:
    https://github.com/Finb/bark-server/releases
    或自己编译
    https://github.com/Finb/bark-server

  2. 运行
    1
    
    ./bark-server_linux_amd64 -addr 0.0.0.0:8080 -data ./bark-data
    
  3. 你可能需要
    1
    
    chmod +x bark-server_linux_amd64
    

    请注意 bark-server 默认使用 /data 目录保存数据,请确保 bark-server 有权限读写 /data 目录,或者你可以使用 -data 选项指定一个目录

  • Serverless

    默认提供 Heroku 免费 一键部署 (2022-11-28日后收费)
    Deploy

    其他支持WEB路由的 serverless 服务器可以使用 bark-server -serverless true 开启。

    开启后, bark-server 会读取系统环境变量 BARK_KEY 和 BARK_DEVICE_TOKEN, 需提前设置好。

    变量名填写要求
    BARK_KEY除了不能填 “push” 外,可以随便填写你喜欢的。
    BARK_DEVICE_TOKENBark App 设置中显示的 DeviceToken,此 Token 是 APNS 真实设备 Token ,请不要泄露

    请注意 Serverless 模式只允许一台设备使用

使用

1
curl http://0.0.0.0:8080/ping

Ping成功后,在APP端填入你的服务器IP或域名

命令行发推送

直接给设备发推送,无需添加服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 设置环境变量
# 下载 key https://raw.githubusercontent.com/Finb/bark-server/master/deploy/AuthKey_LH4T9V5U4R_5U8LBRXG3A.p8 
# 将 key 文件路径填到下面
TOKEN_KEY_FILE_NAME= 
# 从 app 设置中复制 DeviceToken 到这
DEVICE_TOKEN=

#下面的不要修改
TEAM_ID=5U8LBRXG3A
AUTH_KEY_ID=LH4T9V5U4R
TOPIC=me.fin.bark
APNS_HOST_NAME=api.push.apple.com

# 生成TOKEN
JWT_ISSUE_TIME=$(date +%s)
JWT_HEADER=$(printf '{ "alg": "ES256", "kid": "%s" }' "${AUTH_KEY_ID}" | openssl base64 -e -A | tr -- '+/' '-_' | tr -d =)
JWT_CLAIMS=$(printf '{ "iss": "%s", "iat": %d }' "${TEAM_ID}" "${JWT_ISSUE_TIME}" | openssl base64 -e -A | tr -- '+/' '-_' | tr -d =)
JWT_HEADER_CLAIMS="${JWT_HEADER}.${JWT_CLAIMS}"
JWT_SIGNED_HEADER_CLAIMS=$(printf "${JWT_HEADER_CLAIMS}" | openssl dgst -binary -sha256 -sign "${TOKEN_KEY_FILE_NAME}" | openssl base64 -e -A | tr -- '+/' '-_' | tr -d =)
# 如果有条件,最好改进脚本缓存此 Token。Token 30分钟内复用同一个,每过30分钟重新生成
# 苹果文档指明 TOKEN 生成间隔最短20分钟,TOKEN 有效期最长60分钟
# 间隔过短重复生成会生成失败,TOKEN 超过1小时不重新生成就不能推送
# 但经我不负责任的简单测试可以短时间内正常生成
# 此处仅提醒,或许可能因频繁生成 TOKEN 导致推送失败
AUTHENTICATION_TOKEN="${JWT_HEADER}.${JWT_CLAIMS}.${JWT_SIGNED_HEADER_CLAIMS}"

#发送推送
curl -v --header "apns-topic: $TOPIC" --header "apns-push-type: alert" --header "authorization: bearer $AUTHENTICATION_TOKEN" --data '{"aps":{"alert":"test"}}' --http2 https://${APNS_HOST_NAME}/3/device/${DEVICE_TOKEN}

# 推送参数格式可以参考
# https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/generating_a_remote_notification
# 一定要带上 "mutable-content" : 1 ,否则推送扩展不执行,不会保存推送。
# 示例:
{
    "aps": {
        "mutable-content": 1,
        "alert": {
            "title" : "title",
            "body": "body"
        },
        "category": "myNotificationCategory",
        "sound": "minuet.caf"
    },
    "icon": "https://day.app/assets/images/avatar.jpg"
}

推送证书:

  • 当你需要集成Bark到自己的系统或重新实现后端代码时可能需要推送证书
    有效期到: 永久
    Key ID: LH4T9V5U4R
    TeamID: 5U8LBRXG3A
    AuthKey_LH4T9V5U4R_5U8LBRXG3A.p8

其他:

  1. APP端负责将DeviceToken发送到服务端。
    服务端收到一个推送请求后,将发送推送给Apple服务器。然后手机收到推送

  2. 服务端代码: https://github.com/Finb/bark-server

  3. App代码: https://github.com/Finb/Bark

This post is licensed under CC BY 4.0 by the author.

iOS Touch message 传递图解

Bark 常见问题

Comments powered by Disqus.

热门标签