You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

459 lines
13 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# JPush PHP Server SDK Doc
JPush PHP Server SDK主要提供4部分API
* [Push API](http://docs.jpush.io/server/rest_api_v3_push/)
* [Report API](http://docs.jpush.io/server/rest_api_v3_report/)
* [Device API](http://docs.jpush.io/server/rest_api_v3_device/)
* [Schedule API](http://docs.jpush.io/server/rest_api_push_schedule/)
### Init API : 初始化
在调用推送之前我们必须先初始化JPush调用以下代码可以进行快速初始化
```php
$client = new JPush($app_key, $master_secret);
```
在初始化JPush的时候可以指定一些初始参数如**日志路径****失败请求最大重试次数**
```php
$client = new JPush($app_key, $master_secret, $log_path, $max_retry_times);
```
PS:
* 默认日志路径为`./jpush.log`,即保存在当前运行目录,如果想关闭日志,可以指定为`null`。
* 默认请求失败最大重试次数为3如果想请求关闭失败重试功能可以指定为`null`。
### Push API : 构建推送PushPayload
在初始化JPush后调用以下代码将返回一个推送Payload构建器它提供丰富的API来帮助你构建PushPayload。
```php
$push = $client->push();
```
通过[JPush Push API](docs.jpush.io/server/rest_api_v3_push/) 我们知道一个PushPayload是由以下几个部分构成的
* Platform
* Audience
* Notification
* Message
* SmsContent
* Options
接下来我们将了解如何用PushPayload构建器灵活地创建PushPayload。
#### Platform Setter
我们可以通过以下代码指定Platform的对象为`all`
```php
$push->setPlatform('all')
```
如果想指定为特定平台:
```php
$push->setPlatform('ios', 'android')
```
亦或者:
```php
$push->setPlatform(array('ios', 'android'))
```
#### Audience Setter
我们可以通过以下代码指定Audience的对象为`all`
```php
$push->addAllAudience()
```
当然为了保持API风格的统一我们也提供一下方法将Audience指定的`all`
```php
$push->setAudience('all')
```
以下示例如何指定Audience的Tags
```php
$push->addTags('tag1');
```
如果需要同时指定多个Tags, 可以用一下方法调用
```php
$push->addTags(array('tag1', 'tag2'));
```
其他诸如 `addAlias()`, `addRegistrationId()`, `addTagAnd()`的使用方法与`addTags()`类似,在此不做赘述。
PS:可以多次调用addXXX操作最终将在多次结果中取并集。
#### Notification Setter
如果你只是想简单地给所有平台推送相同的消息的话,调用以下方法:
```php
$push->setNotificationAlert($alert)
```
我们也提供单独添加各个移动平台的Notification的方法。
**添加iOS Notification:**
```php
$push->addIosNotification($alert=null, $sound=null, $badge=null, $content_available=null, $category=null, $extras=null)
```
参数说明:
* alert:`String|Array` 通知内容,这里指定了,将会覆盖上级统一指定的`setNotificationAlert()`信息;内容为空则不展示到通知栏。支持 emoji 表情。
* iOS8.2及以上alert支持JSON格式可以指定alert为一个Array如`$alert=array("key1"=>"value1", "key2"=>"value2")`
* sound:`String` 通知提示声音,如果无此字段,则此消息无声音提示;有此字段,如果找到了指定的声音就播放该声音,否则播放默认声音,如果此字段为空字符串iOS 7 为默认声音iOS 8 为无声音。
* 如果为null或者不显式指定则填充为默认值`''`空字符串
* 如果不想指定Sound可以显式的指定为`JPush::DISABLE_SOUND`
* badge:`Int` 应用角标,如果不填,表示不改变角标数字;否则把角标数字改为指定的数字;为 0 表示清除。支持`+1`,`-1`这样的字符串表示在原有的badge基础上进行增减。
* 示例:`0`, `1`, `+1`, `-1`
* 如果为null或者不显式指定则填充为默认值`+1`
* 如果想不指定Badge可以显式的指定为`JPush::DISABLE_BADGE`
* content_abaliable:`Bool` 推送唤醒,为真是表示是`Background Remote Notification`, 不指定则表示是`Remote Notification`
* category: `String` iOS8才支持。设置APNs payload中的"category"字段值
* extras: `Array` 扩展字段,这里自定义 Key/value 信息,以供业务使用
* 示例:`$extras=array("key1"=>"value1", "key2"=>"value2")`
**添加Android Notification**
```php
$push->addAndroidNotification($alert=null, $title=null, $builderId=null, $extras=null)
```
参数说明:
* alert:`String` 通知内容,这里指定了,将会覆盖上级统一指定的`setNotificationAlert()`信息;内容为空则不展示到通知栏。
* title:`String` 通知标题,如果指定了,则通知里原来展示 App名称的地方将展示成这个字段。
* builderId:`Int` 通知栏样式ID
* extras:`Array` 扩展字段,这里自定义 Key/value 信息,以供业务使用
* 示例:`$extras=array("key1"=>"value1", "key2"=>"value2")`
**添加WinPhone Notification**
```php
$push->addWinPhoneNotification($alert=null, $title=null, $_open_page=null, $extras=null)
```
参数说明:
* alert:`String` 通知内容,这里指定了,将会覆盖上级统一指定的`setNotificationAlert()`信息;内容为空则不展示到通知栏。
* title:`String` 通知标题,会填充到 toast 类型 text1 字段上。
* \_open\_page:`String` 点击打开的页面名称
* extras:`Array` 扩展字段,这里自定义 Key/value 信息,以供业务使用
* 示例:`$extras=array("key1"=>"value1", "key2"=>"value2")`
#### Message Setter
我们可以通过以下方法设置自定义消息Message
```php
$push->setMessage($msg_content, $title=null, $content_type=null, $extras=null)
```
参数说明:
* msg_content:`String` 消息内容本身
* title:`String` 消息标题
* content_type:`String` 消息类型
* extras:`Array` 扩展字段,这里自定义 Key/value 信息,以供业务使用
* 示例:`$extras=array("key1"=>"value1", "key2"=>"value2")`
#### Sms Message Setter
我们可以通过以下方法设置短信推送消息
```php
$push->setSmsMessage($content, $delay_time)
```
参数说明:
* content:`String` 短信文本不超过480字符
* delay_time:`Int` 只对Android平台有效表示指定时间内没收到Push即发送短信
#### Options Setter
我们可以通过以下方法设置Options
```php
$push->setOptions($sendno=null, $time_to_live=null, $override_msg_id=null, $apns_production=null, $big_push_duration=null)
```
参数说明:
* sendno:`Int` 推送序号, 纯粹用来作为 API 调用标识API 返回时被原样返回,以方便 API 调用方匹配请求与返回。
* 如未指定或者指定为`null`则随机生产一个sendno序号
* time\_to\_live:`Int` 离线消息保留时长(秒),推送当前用户不在线时,为该用户保留多长时间的离线消息,以便其上线时再次推送。
* 默认 86400 1 天),最长 10 天。
* 设置为 0 表示不保留离线消息,只有推送当前在线的用户可以收到。
* override\_msg\_id:`Int` 要覆盖的消息ID如果当前的推送要覆盖之前的一条推送这里填写前一条推送的 msg_id 就会产生覆盖效果,
* 该 msg_id 离线收到的消息是覆盖后的内容;
* 即使该 msg\_id Android 端用户已经收到如果通知栏还未清除则新的消息内容会覆盖之前这条通知覆盖功能起作用的时限是1 天。如果在覆盖指定时限内该 msg\_id 不存在,则返回 1003 错误,提示不是一次有效的消息覆盖操作,当前的消息不会被推送。
* apns\_production:`Bool` APNs是否生产环境True 表示推送生产环境False 表示要推送开发环境如果不指定则为推送生产环境。JPush 官方 API LIbrary (SDK) 默认设置为推送 “开发环境”。
* 如未指定或者指定为`null`, 则默认指定为`false`
* big\_push\_duration:`Int` 定速推送时长(分钟), 又名缓慢推送把原本尽可能快的推送速度降低下来给定的n分钟内均匀地向这次推送的目标用户推送。
* 最大值为1400.未设置则不是定速推送。
#### Common Method
**获得当前构建对象**
```php
$push->build();
```
**将当前构建对象打印在控制台**
```php
$push->printJSON()
```
**发送推送**
该方法内部将自动调用构建方法获得当前构建对象并转化为JSON向JPush服务器发送请求
```php
$push->send()
```
PS: 构建PushPayload的API每一次都会返回自身的引用所以我们可用使用链式调用的方法提高代码的简洁性如:
```php
$result = $client->push()
->setPlatform(array('ios', 'android'))
->addAlias('alias1')
->addTag(array('tag1', 'tag2'))
->setNotificationAlert('Hi, JPush')
->addAndroidNotification('Hi, android notification', 'notification title', 1, array("key1"=>"value1", "key2"=>"value2"))
->addIosNotification("Hi, iOS notification", 'iOS sound', JPush::DISABLE_BADGE, true, 'iOS category', array("key1"=>"value1", "key2"=>"value2"))
->setMessage("msg content", 'msg title', 'type', array("key1"=>"value1", "key2"=>"value2"))
->setOptions(100000, 3600, null, false)
->send();
```
### Report API
在初始化JPush后调用以下代码将返回report对象它提供丰富的API来帮助你获取Report数据。
```php
$report = $client->report()
```
#### 获取送达统计
调用一下代码可以获取送达统计
```php
$result = $report->getReceived('1150720279');
```
如果你想一次性查询多个MsgId的送达统计可以使用以下方法调用
```php
$result = $report->getReceived('1150720279,1492401191,1150722083');
```
或者
```php
$result = $report->getReceived(array('1150720279', '1492401191', '1150722083'));
```
#### 获取消息统计
调用一下代码可以获取消息统计
```php
$report->getMessages('541778586,1235578218')
```
消息统计与送达统计一样,接受一个数组的参数,在这里不做赘述
#### 获取用户统计
调用一下代码可以获得用户统计
```php
$report->getUsers($time_unit, $start, $duration)
```
参数说明:
* time_unit:`String` 时间单位, 可取值HOUR, DAY, MONTH
* start:`String` 起始时间
* 如果单位是小时则起始时间是小时包含天格式例2014-06-11 09
* 如果单位是天则起始时间是日期格式例2014-06-11
* 如果单位是月则起始时间是日期格式例2014-06
* duration:`String` 持续时长
* 如果单位是天,则是持续的天数。以此类推
* 只支持查询60天以内的用户信息对于time_unit为HOUR的只支持输出当天的统计结果。
### Device API
在初始化JPush后调用以下代码将返回device对象它提供丰富的API来帮助操作Device API
```php
$device = $client->device();
```
#### 操作Device(registration_id)
**查询指定设备的别名与标签**
```php
$device->getDevices($registration_id);
```
**更新指定设备的别名与标签**
```php
$device-> updateDevice($registrationId, $alias = null, $addTags = null, $removeTags = null)
```
参数说明:
* $alais:`String` 别名
* $addTags:`Array` 增加的Tags
* $removeTags:`Array` 移除的Tags
**获取在线用户的登录状态**
```php
$device->getDevicesStatus($registrationId)
```
参数说明:
* registrationId可以指定为一个registrationId的数组亦可以指定为字符串多个registrationId以逗号分隔
#### 操作Tag
**获取Tag列表**
```php
$device->getTags()
```
**判断指定设备是否在指定Tag之下**
```php
$device->isDeviceInTag($registrationId, $tag)
```
**更新Tag**
```php
$device->updateTag($tag, $addDevices = null, $removeDevices = null)
```
参数说明:
* tag:`String` 指定的标签
* addDevices:`Array` 增加到指定Tag中的registration_id
* removeDevices:`Array` 从指定Tag中移除的registration_id
**删除Tag**
```php
$device->deleteTag($tag);
```
#### 操作Alias
**获取指定Alias下的设备**
```php
$device->getAliasDevices($alias, $platform=null)
```
参数说明:
* alias: `String` 指定的别名
* platform: `String|Array` 指定的平台,不填表示所有的平台
* String参数示例: `$platform='ios,android'`
* Array参数示例: `$platform=array('ios', 'android')`
**删除别名**
```php
$device->deleteAlias($alias)
```
### Schedule API
在初始化JPush后调用以下代码将返回schedule对象它提供丰富的API来帮助操作Schedule API
```php
$schedule = $client->schedule();
```
#### 创建定时任务
定时任务分为Single与Periodical两种可以通过调用以下方法创建定时任务
```php
$schedule->createSingleSchedule($name, $push_payload, $trigger)
$schedule->createPeriodicalSchedule($name, $push_payload, $trigger)
```
参数说明:
* name: `String` 定时任务的名称
* push_payload: `PushPayload` Push的构建对象通过Push模块的`build()`方法获得
* trigger: `Array` 触发器对象
具体调用示例参考[Schedule Example](https://github.com/jpush/jpush-api-php-client/blob/master/examples/schedule_example.php)
#### 更新定时任务
```php
$schedule->updateSingleSchedule($schedule_id, $name=null, $enabled=null, $push_payload=null, $trigger=null)
$schedule->updatePeriodicalSchedule($schedule_id, $name=null, $enabled=null, $push_payload=null, $trigger=null)
```
#### 获取定时任务列表
```php
$schedule->getSchedules($page=1);
```
#### 获取指定定时任务
```php
$schedule->getSchedule($schedule_id);
```
#### 删除指定定时任务
```php
$schedule->deleteSchedule($schedule_id);
```