<commit_before># 目录

- [Getting Started](#getting-started)
- [Push API](#push-api)
 - [构建 Audience 对象](#构建-audience-对象)
 - [构建 Notification 对象](#构建-notification-对象)
 - [构建 PushPayload 对象](#构建-pushpayload-对象)
 - [推送消息](#推送消息)
- [Report API](#report-api)
 - [送达统计](#送达统计)
 - [消息统计（VIP专属接口）](#消息统计vip专属接口)
 - [用户统计（VIP专属接口）](#用户统计vip专属接口)
- [Schedule API](#schedule-api)
 - [构建 Trigger 对象](#构建-trigger-对象)
 - [构建 SchedulePayload 对象](#构建-schedulepayload-对象)
 - [创建定时任务](#创建定时任务)
 - [获取有效的定时任务列表](#获取有效的定时任务列表)
 - [获取定时任务详情](#获取定时任务详情)
 - [更新定时任务](#更新定时任务)
 - [删除定时任务](#删除定时任务)
- [Device API](#device-api)
 - [查询设备](#查询设备-设备的别名与标签)
 - [更新设备](#更新设备-设备的别名与标签)
 - [获取用户在线状态（VIP专属接口）](#获取用户在线状态vip专属接口)
 - [查询标签列表](#查询标签列表)
 - [判断设备与标签的绑定](#判断设备与标签的绑定)
 - [更新标签](#更新标签-与设备的绑定的关系)
 - [删除标签](#删除标签-与设备的绑定关系)
 - [查询别名](#查询别名-与设备的绑定关系)
 - [删除别名](#删除别名-与设备的绑定关系)

## Getting Started

[Where to get app_key or master_secret?](https://www.jpush.cn/common/apps/new)

```ruby
app_key = 'xxx'
master_secret = 'xxx'
jpush = JPush::Client.new(app_key, master_secret)
```

## Push API

```ruby
pusher = jpush.pusher

# simplest push Hello to all
push_payload = JPush::Push::PushPayload.new(
  platform: 'all',
  audience: 'all',
  notification: 'hello jpush',
  message: 'hello world'
)
pusher.push(push_payload)
```

#### 构建 Audience 对象

推送设备对象，表示一条推送可以被推送到哪些设备列表。
如果要发广播（全部设备），不需要构建 Audience 对象，在新建 PushPayload 对象的时候，给 'audience' 参数直接传递字符串 'all' 即可。
广播外的设备选择方式，有4种类型： tag, tag_and, alias, registration_id, **4种类型至少需要有其一, 这几种类型并存时多项的隐含关系是 AND，即取交集**

```ruby
audience = JPush::Push::Audience.new
audience.set_tag(tag)
audience.set_tag_and(tag_and)
audience.set_alias(alis)
audience.set_registration_id(registration_ids)

# 链式调用
audience = JPush::Push::Audience.new.
  set_tag(tag).
  set_tag_and(tag_and).
  set_alias(alis).
  set_registration_id(registration_ids)
```

参数说明

| 参数 | 是否必须 | 说明 |
| --- | :---: | --- |
| tag | 否 | 有效的标签字符串或者一个最多包含20个有效的标签字符串的数组 |
| tag_and | 否 | 有效的标签字符串或者一个最多包含20个有效的标签字符串的数组 |
| alis | 否 | 有效的别名字符串或者一个最多包含1000个有效的别名字符串的数组 |
| registration_ids | 否 | 有效的 registration id 字符串或者一个最多包含1000个有效的 registration id 字符串的数组 |

#### 构建 Notification 对象

若通知的内容在各个平台上，都只有 'alert' 这一个最基本的属性,
则不需要构建 Notifacation 对象，在新建 PushPayload 对象的时候，给 'notication' 参数直接传递表示 alert 的字符串即可，
也可以在 Notifacation 对象中设置 alert 属性。
其下属属性包含3种，2个平台属性，以及一个 'alert' 属性。

```ruby
notification = JPush::Push::Notification.new
```

###### alert

```ruby
notification.set_alert(alert)
```

###### android

```ruby
notification.set_android(
  alert: alert,
  title: title,
  builder_id: builder_id,
  extras: extras
)
```

参数说明

| 参数 | 是否必须 | 说明 |
| --- | :---: | --- |
| alert | 是 | 表示通知内容，会覆盖上级统一指定的 alert 信息；内容可以为空字符串，表示不展示到通知栏 |
| title | 否 | 表示通知标题，会替换通知里原来展示 App 名称的地方 |
| builder_id | 否 | 表示通知栏样式ID，Android SDK 可设置通知栏样式，这里根据样式 ID 来指定该使用哪套样式 |
| extras | 否 | 表示扩展字段，接受一个 Hash 对象，以供业务使用 |

###### ios

```ruby
notification.set_ios(
  alert: alert,
  sound: sound,
  badge: badge,
  available: available,
  category: category,
  extras: extras
)
```

参数说明

| 参数 | 是否必须 | 说明 |
| --- | :---: | --- |
| alert | 是 | 表示通知内容，会覆盖上级统一指定的 alert 信息；内容可以为空字符串，表示不展示到通知栏 |
| sound | 否 | 表示通知提示声音 |
| bandge | 否 | 表示应用角标，把角标数字改为指定的数字；为 0 表示清除 |
| available | 否 | 表示推送唤醒，仅接受 true 表示为 Background Remote Notification，若不填默认是 nil 表示普通的 Remote Notification |
| category | 否 | IOS8才支持。设置 APNs payload 中的 'category' 字段值 |
| extras | 否 | 表示扩展字段，接受一个 Hash 对象，以供业务使用 |

###### 链式调用

```ruby
notification = JPush::Push::Notification.new.
  set_alert(alert).
  set_android(
    alert: alert,
    title: title,<commit_msg>fix typo<commit_after># 目录

- [Getting Started](#getting-started)
- [Push API](#push-api)
 - [构建 Audience 对象](#构建-audience-对象)
 - [构建 Notification 对象](#构建-notification-对象)
 - [构建 PushPayload 对象](#构建-pushpayload-对象)
 - [推送消息](#推送消息)
- [Report API](#report-api)
 - [送达统计](#送达统计)
 - [消息统计（VIP专属接口）](#消息统计vip专属接口)
 - [用户统计（VIP专属接口）](#用户统计vip专属接口)
- [Schedule API](#schedule-api)
 - [构建 Trigger 对象](#构建-trigger-对象)
 - [构建 SchedulePayload 对象](#构建-schedulepayload-对象)
 - [创建定时任务](#创建定时任务)
 - [获取有效的定时任务列表](#获取有效的定时任务列表)
 - [获取定时任务详情](#获取定时任务详情)
 - [更新定时任务](#更新定时任务)
 - [删除定时任务](#删除定时任务)
- [Device API](#device-api)
 - [查询设备](#查询设备-设备的别名与标签)
 - [更新设备](#更新设备-设备的别名与标签)
 - [获取用户在线状态（VIP专属接口）](#获取用户在线状态vip专属接口)
 - [查询标签列表](#查询标签列表)
 - [判断设备与标签的绑定](#判断设备与标签的绑定)
 - [更新标签](#更新标签-与设备的绑定的关系)
 - [删除标签](#删除标签-与设备的绑定关系)
 - [查询别名](#查询别名-与设备的绑定关系)
 - [删除别名](#删除别名-与设备的绑定关系)

## Getting Started

[Where to get app_key or master_secret?](https://www.jpush.cn/common/apps/new)

```ruby
app_key = 'xxx'
master_secret = 'xxx'
jpush = JPush::Client.new(app_key, master_secret)
```

## Push API

```ruby
pusher = jpush.pusher

# simplest push Hello to all
push_payload = JPush::Push::PushPayload.new(
  platform: 'all',
  audience: 'all',
  notification: 'hello jpush',
  message: 'hello world'
)
pusher.push(push_payload)
```

#### 构建 Audience 对象

推送设备对象，表示一条推送可以被推送到哪些设备列表。
如果要发广播（全部设备），不需要构建 Audience 对象，在新建 PushPayload 对象的时候，给 'audience' 参数直接传递字符串 'all' 即可。
广播外的设备选择方式，有4种类型： tag, tag_and, alias, registration_id, **4种类型至少需要有其一, 这几种类型并存时多项的隐含关系是 AND，即取交集**

```ruby
audience = JPush::Push::Audience.new
audience.set_tag(tag)
audience.set_tag_and(tag_and)
audience.set_alias(alis)
audience.set_registration_id(registration_ids)

# 链式调用
audience = JPush::Push::Audience.new.
  set_tag(tag).
  set_tag_and(tag_and).
  set_alias(alis).
  set_registration_id(registration_ids)
```

参数说明

| 参数 | 是否必须 | 说明 |
| --- | :---: | --- |
| tag | 否 | 有效的标签字符串或者一个最多包含20个有效的标签字符串的数组 |
| tag_and | 否 | 有效的标签字符串或者一个最多包含20个有效的标签字符串的数组 |
| alis | 否 | 有效的别名字符串或者一个最多包含1000个有效的别名字符串的数组 |
| registration_ids | 否 | 有效的 registration id 字符串或者一个最多包含1000个有效的 registration id 字符串的数组 |

#### 构建 Notification 对象

若通知的内容在各个平台上，都只有 'alert' 这一个最基本的属性,
则不需要构建 Notifacation 对象，在新建 PushPayload 对象的时候，给 'notication' 参数直接传递表示 alert 的字符串即可，
也可以在 Notifacation 对象中设置 alert 属性。
其下属属性包含3种，2个平台属性，以及一个 'alert' 属性。

```ruby
notification = JPush::Push::Notification.new
```

###### alert

```ruby
notification.set_alert(alert)
```

###### android

```ruby
notification.set_android(
  alert: alert,
  title: title,
  builder_id: builder_id,
  extras: extras
)
```

参数说明

| 参数 | 是否必须 | 说明 |
| --- | :---: | --- |
| alert | 是 | 表示通知内容，会覆盖上级统一指定的 alert 信息；内容可以为空字符串，表示不展示到通知栏 |
| title | 否 | 表示通知标题，会替换通知里原来展示 App 名称的地方 |
| builder_id | 否 | 表示通知栏样式ID，Android SDK 可设置通知栏样式，这里根据样式 ID 来指定该使用哪套样式 |
| extras | 否 | 表示扩展字段，接受一个 Hash 对象，以供业务使用 |

###### ios

```ruby
notification.set_ios(
  alert: alert,
  sound: sound,
  badge: badge,
  available: available,
  category: category,
  extras: extras
)
```

参数说明

| 参数 | 是否必须 | 说明 |
| --- | :---: | --- |
| alert | 是 | 表示通知内容，会覆盖上级统一指定的 alert 信息；内容可以为空字符串，表示不展示到通知栏 |
| sound | 否 | 表示通知提示声音 |
| badge | 否 | 表示应用角标，把角标数字改为指定的数字；为 0 表示清除 |
| available | 否 | 表示推送唤醒，仅接受 true 表示为 Background Remote Notification，若不填默认是 nil 表示普通的 Remote Notification |
| category | 否 | IOS8才支持。设置 APNs payload 中的 'category' 字段值 |
| extras | 否 | 表示扩展字段，接受一个 Hash 对象，以供业务使用 |

###### 链式调用

```ruby
notification = JPush::Push::Notification.new.
  set_alert(alert).
  set_android(
    alert: alert,
    title: title,
{'fraction_non_alphanumeric': 0.16619876473891074, 'fraction_numerical': 0.0050533408197641775, 'mean_word_length': 4.718298555377207, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 2, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '862306', 'n_tokens_mistral': 4087, 'n_tokens_neox': 4479, 'n_words': 548}