非官方小米推送服务端 Ruby SDK

Build Status Code Climate Inline docs Gem version License

TL;DR

特别注意:仅支持 Ruby 2.1.0 (包含)以上版本。

安装

添加如下至 Gemfile:

gem 'xiaomi-push'

执行:

$ bundle

或直接安装:

$ gem install xiaomi-push

用法

发单一消息

支持按照 reg_id/alias/topic/topics/user/all 的方式向单个或一组设备发送同一条推送消息。

require 'xiaomi-push'

# 初始化
# iOS (环境支持 :production/:sandbox)
client = Xiaomi::Push::IOS('Fill your app secret', :production)
# Android
client = Xiaomi::Push::Android('Fill your app secret')

# 消息结构
# Hash 模式
message = {
  'title': 'Android 需要标题',
  'descrption': 'iOS 主要显示描述',
  'extra.uri': 'app://bbs?id=8624'
}

# Builder 模式
# iOS
message = Xiaomi::Push::Message::IOS.new(
  description: 'iOS 主要显示描述',
  badge: 10,
  extras: {
    uri: 'app://bbs?id=8624',
    source: 'mpush'
  }
)

# iOS 10
message = Xiaomi::Push::Message::IOS.new(
  title: '这是标题',
  subtitle: '这是副标题'
  description:'iOS 主要显示描述', # 对于 iOS 这里即可以是 description 也可以是 iOS 10 结构的 body
  badge: 1,
  extras: {
    uri: 'app://bbs?id=8624',
    source: 'mpush'
  }
)

# Android
message = Xiaomi::Push::Message::Android.new(
  title: '标题要有吸引力',
  description: '描述可以在手机显示两行',
  notify_type: 'DEFAULT_ALL',
  extras: {
    source: 'mpush'
  }
)

# 支持单独追加 extra
message.extra('uri', 'app://bbs?id=8624')

# 发消息
# 根据 regid
client.message.send reg_id:'id', message:message

# 根据 alias
client.message.send alias:'alias', message:message

# 根据 topic
client.message.send topic:'topic', message:message

# 全部推送
client.message.send all:true, message:message

发送多条消息

支持同一设备类型的设备发送不同的消息。注意发送多个消息不能是不同类型的设备 key。

支持的消息类型:

  • :reg_id
    • reg_id
    • regid
    • registration_id
  • :alias
    • :alias
  • :user
    • :user
    • :account
    • :useraccount
    • :user_account

以上子列表为消息体传递的设备的 key 的名字。

# 向多个 reg id 发送不同的消息
client.messages.send(:reg_id, [
  {
    reg_id: 'abc',
    title: '这是标题1',
    description: '这个是推送的描述1',
    notify_type: -1
  },
  {
    regid: 'dfc',
    title: '这是标题2',
    description: '这个是推送的描述2',
  },
  {
    registration_id: 'dfc',
    title: '这是标题2',
    description: '这个是推送的描述2',
  }
])

# 这个是错误的消息,无法发送
client.messages.send(:alias, [
  {
    reg_id: 'abc',
    title: '这是标题1',
    description: '这个是推送的描述1',
    notify_type: -1
  },
  {
    user: 'dfc',
    title: '这是标题2',
    description: '这个是推送的描述2',
  },
])

订阅/取消订阅标签

# 订阅单个 reg id 到 beijing 标签
client.topic.subscribe(reg_id: 'abc', topic: 'beijing')

# 订阅多个 alias 到 beijing 标签
client.topic.subscribe(alias: 'abc,def,ghi,jkl', topic: 'beijing')

# 取消订阅 beijing 标签的单个 reg id
client.topic.unsubscribe(reg_id: 'abc', topic: 'beijing')

# 取消订阅 beijing 标签的多个 alias
client.topic.unsubscribe(alias: 'abc,def,ghi,jkl', topic: 'beijing')

获取无效 iOS 的推送设备

用于检查 iOS 用户关闭了应用的推送或者是卸载了 App 的设备列表

client.feedback.invalid

获取消息的统计数据

# 获取 2017-09-01 到 2017-09-30 应用 com.icyleaf.app.helloworld 统计数据
client.message.counters('20170901', '20170930', 'com.icyleaf.app.helloworld')

更多用例可查阅 Rakefile

命令行工具

本 SDK 同时还附带一个命令行工具 xmp,可以使用它尽快快速的测试和验证参数信息.

# 发消息
## iOS
### 发送附加内容并设置未读消息数为 2
$ xmp message --device ios --secret '<密钥>' \
  --alias '<Alias>' \
  -d '推送的描述内容' \
  -b 2 \
  -e uri="http://icyleaf.com"
# => {"result"=>"ok", "trace_id"=>"abc", "code"=>0, "data"=>{"id"=>"abc68b8350529097551xyz"}, "description"=>"成功", "info"=>"Received push messages for 1 ALIAS"}

## Android
### 最基本的推送信息
$ xmp message --device android --secret '<密钥>' \
  --regid '<RegId>' \
  -i '推送的标题' \
  -d '推送的描述内容'
# => {"result"=>"ok", "trace_id"=>"abc", "code"=>0, "data"=>{"id"=>"abc68b8350529097551xyz"}, "description"=>"成功", "info"=>"Received push messages for 1 REG_ID"}

# 查找绑定的 aliases 和 topics
$ xmp user --device ios --secret '<密钥>' --reg-id '<RegId>'
# => alias count: 1
# =>  * ABCDEFGH-1234-5678-90ABC-F4DC5731EEFD
# => topic count: 1
# =>  * all

# 查找 iOS 无效的设备(Reg id)
$ xmp feedback --device ios --secret '<密钥>'
# => {"result"=>"ok", "trace_id"=>"Xlm07b67505290966457ey", "code"=>0, "data"=>{"list"=>["+9AKnbpV22HafwE7vjYMr6Hc7i41ClyQr7iqX1fm7zc="]}}

# 查看帮助
$ xmp message --help

  NAME:

    xmp

  DESCRIPTION:

    小米推送命令行工具

  COMMANDS:

    feedback 获取小米无效的设备列表
    message  发送小米推送消息
    user     小米 aliases/topics 查询工具

相关资源

贡献代码

  1. Fork it ( https://github.com/[my-github-username]/xiaomi-push/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request