Skip to content

yunba/mipush

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

##小米推送服务器 API

小米推送 Restful API Erlang实现

小米推送官网

使用方法:

       PushMsg = #{
           type => android,
           auth => "your_APIKey",
           restricted_package_name => "app.package_name",
           payload => <<"">>,
           pass_through => 0,
           title => <<"小米App"/utf8>>,
           description => <<"测试描述"/utf8>>,
           notify_type => 1 bor 4,
           time_to_live => 1209500000,
           notify_id => 2,
           'extra.notify_effect' => "2",
           'extra.notify_foreground' => "1",
           'extra.sound_uri' => <<"android.resource://yourpath/raw/sound_file">>,
           'extra.intent_uri' => <<"intent://your_url#Intent;scheme=http;action=android.intent.action.VIEW;end">>
         },
       RegID1 = "your_regid_base64",
       RegID2 = "your_regid_base64",
      {ok, Pid} = mipush:connect(#{host => "api.xmpush.xiaomi.com"}),
      R1 = mipush:push_to_regid(Pid, [RegID1, RegID2], Push, return),
      mipush:disconnect(Pid).

其它方法说明可见mipush.erl, 例子可见mipush_example.erl

内部实现:

####异步发送大量请求流程:

  1. 使用{active, true}连接小米推送服务器(ssl:connect/3);
  2. 拼凑符合小米官方的restful API接口request请求格式;
  3. 使ssl:send/2发送步骤2拼凑的消息所直接返回ok;
  4. 重复步骤2,3;
  5. 小米服务器会主动对步骤3中的每一个消息都异步的repsonse, 如果repsonse error, 则使用ssl:connect/3中定义的err_callback函数处理;
  6. 发送完毕后,可以手动使用ssl:close/1 关闭连接(小米服务器如果没有一段时间没有收到请求,也会在自动发ssl_closed主动要求关闭连接).

####同步发送请求流程:

  1. 使用{active, false}连接小米推送服务器(ssl:connect/3);
  2. 拼凑符合小米官方的restful API接口request请求格式;
  3. 使ssl:send/2发送步骤2拼凑的消息;
  4. 使用ssl:recv/3来阻塞等待小米服务器返回步骤3中请求的repsonse;
  5. 直接返回repsonse给调用者(不会使用err_callback处理错误)
  6. 重复步骤3,4,5;
  7. 发送完毕后,可以手动使用ssl:close/1 关闭连接(小米服务器如果没有一段时间没有收到请求,也会在自动发ssl_closed主动要求关闭连接).

####Tip

  1. 使用mipush:connect/1建立的连接会根据expires(秒)来定期重连小米服务器.

CheckList

  • It's checked with Elvis
  • Readme中添加example或wiki
  • 添加MIT证书
  • 功能测试(目前是手动测试,有空就mock server)
  • 性能测试分析(benchmark)
  • 如何推广

Releases

No releases published

Packages

No packages published

Languages

  • Erlang 98.8%
  • Makefile 1.2%