# JPush API PHP Library doc JPush API PHP Library 提供简化构建JPush Push JSON的API,开发者只需要完成一下几个操作就能完成一次推送。 1. 指定推送的平台(platform) 2. 指定推送的用户(audience) 3. 构建推送的notification或者message 4. 指定额外的配置options 5. 调用推送 ## 版本更新 ### v3.2.0 * 支持设置IOS Notification的category属性 * 设置APNs payload中的"category"字段值(仅支持IOS8) * 支持设置big_push_duration属性 * 指定时长。规定应在这个时间内推送完成,用于“定速推送” * 新增Report接口 * API /v3/messages 获取消息统计详细数据 * API /v3/users 获取用户统计详细数据 * 新增Validate接口 * 调用Validate可以模拟真实推送,获取msgId,查询影响人群以及其他统计信息,但JPush服务器不会将消息推送给目标用户 * 新增Device API * getDeviceTagAlias 获取指定RegistrationId的所有属性,包含tags, alias * removeDeviceTag 移除指定RegistrationId的所有tag * removeDeviceAlias 移除指定RegistrationId的所有alias * updateDeviceTagAlias 更新指定RegistrationId的指定属性,当前支持tags, alias * getTags 获取当前应用的所有标签列表 * isDeviceInTag 查询某个用户是否在tag下 * updateTagDevices 对指定tag添加或者删除registrationId * deleteUpdate 删除指定Tag,以及与其关联的用户之间的关联关系 * getAliasDevices 获取指定alias下的用户,最多输出10个 * deleteAlias 删除指定alias,以及该alias与用户的绑定关系 ### v3.1.2 * examples中加入**vendor.tar.gz**,现在开发者直接解压此文件到项目目录,引入 **vendor/autoload.php** 既可以使用**JPush**。 * 添加了IOS推送中,支持badge +1, badge -1的操作 ``` // badge 数值在原来的基础上+1 ->setNotification(M\notification('Hi, JPush', M\ios("Hi, IOS", "happy", "+1"))) // badge 数值在原来的基础上-1 ->setNotification(M\notification('Hi, JPush', M\ios("Hi, IOS", "happy", "-1"))) // badge 数值在原来的基础上+5 ->setNotification(M\notification('Hi, JPush', M\ios("Hi, IOS", "happy", "+5"))) ``` ## 依赖 PHP >= 5.3 ### Dependencies * Composer * Httpful * Monolog ### Development Dependencies * PHPUnit ### About Log 请确保当前用户对日志文件夹有读写权限。 ## Example 以下的示例推送一个广播通知给所有用户 ```php require_once 'vendor/autoload.php'; use JPush\Model as M; use JPush\JPushClient; use JPush\Exception\APIConnectionException; use JPush\Exception\APIRequestException; $br = '
'; $client = new JPushClient($app_key, $master_secret); try { $result = $client->push() ->setPlatform(M\all) ->setAudience(M\all) ->setNotification(M\notification('Hi, JPush')) ->send(); echo 'Push Success.' . $br; echo 'sendno : ' . $result->sendno . $br; echo 'msg_id : ' .$result->msg_id . $br; echo 'Response JSON : ' . $result->json . $br; } catch (APIRequestException $e) { echo 'Push Fail.' . $br; echo 'Http Code : ' . $e->httpCode . $br; echo 'code : ' . $e->code . $br; echo 'message : ' . $e->message . $br; echo 'Response JSON : ' . $e->json . $br; echo 'rateLimitLimit : ' . $e->rateLimitLimit . $br; echo 'rateLimitRemaining : ' . $e->rateLimitRemaining . $br; echo 'rateLimitReset : ' . $e->rateLimitReset . $br; } catch (APIConnectionException $e) { echo 'Push Fail.' . $br; echo 'message' . $e->getMessage() . $br; } ``` 以上所有的推送对象构建器,都在 namespace: `JPush\Model` 中 ```php use JPush\Model as M; ``` 以下的示例获取特定ID的统计信息 ```php require_once 'vendor/autoload.php'; use JPush\Model as M; use JPush\JPushClient; use JPush\Exception\APIConnectionException; use JPush\Exception\APIRequestException; $br = '
'; $client = new JPushClient($app_key, $master_secret); try { $msg_ids = '1931816610,1466786990,1931499836'; $result = $client->report($msg_ids); foreach($result->received_list as $received) { echo '---------' . $br; echo 'msg_id : ' . $received->msg_id . $br; echo 'android_received : ' . $received->android_received . $br; echo 'ios_apns_sent : ' . $received->ios_apns_sent . $br; } } catch (APIRequestException $e) { echo 'Push Fail.' . $br; echo 'Http Code : ' . $e->httpCode . $br; echo 'code : ' . $e->code . $br; echo 'message : ' . $e->message . $br; echo 'Response JSON : ' . $e->json . $br; echo 'rateLimitLimit : ' . $e->rateLimitLimit . $br; echo 'rateLimitRemaining : ' . $e->rateLimitRemaining . $br; echo 'rateLimitReset : ' . $e->rateLimitReset . $br; } catch (APIConnectionException $e) { echo 'Push Fail.' . $br; echo 'message' . $e->getMessage() . $br; } ``` ## Payload Selectors JPush Push JSON Model, JPush API v3中,每一个推送对象都是一个JSON对象。其具体结构可以参考 [推送对象][1] 为了开发者更方便构建推送对象,本library提供以下方法: `function: JPush/Model/send()` 将本payload对象推送到JPUSH服务器 返回:PushResponse 服务器响应对象 属性 | 类型 | 说明 -------- | ----- | ----- $sendno | int | 开发者指定的 API 调用标识 $msg_id | long | 推送信息的唯一标示 $json | string | 返回的JSON字符串 $response | object | 返回的response `function: JPush/Model/getJSON()` 获取当前payload对象的JSON字符串,仅供调试使用 返回:String JSON字符串 `function: JPush/Model/printJSON()` 打印当前JSON字符串,仅供调试使用 返回:PushPayload 当前的payload对象 `function: JPush/Model/setAudience()` 设置audience 返回:PushPayload 当前的payload对象 `function: JPush/Model/setMessage()` 设置audience 返回:PushPayload 当前的payload对象 `function: JPush/Model/setNotification()` 设置audience 返回:PushPayload 当前的payload对象 `function: JPush/Model/setMessage()` 设置audience 返回:PushPayload 当前的payload对象 `function: JPush/Model/setOptions()` 设置audience 返回:PushPayload 当前的payload对象 ### Platform Selectors `constant: JPush/Model/all` 设置该payload为推送给所有平台(platform) Example: ```php $payload->setPlatform(M\all); ``` `function: JPush/Model/platform(/* args */)` 构建platform对象 参数: 推送的平台字符串 (android, ios, winphone) Example: ```php $payload->setPlatform(M\platform('ios', 'android')) ``` ### Audience Selectors `constant: JPush/Model/all` 设置该payload为推送给所有用户(audience) Example: ```php $payload->setAudience(M\all); ``` `function: JPush/Model/audience` 构建audience对象 参数:tag(),tag_and(),alias(),registration_id()构建的对象 `function: JPush/Model/tag` 构建tag对象 参数:tag数组 `function: JPush/Model/tag_and` 构建tag_and对象 参数:tag_and数组 `function: JPush/Model/alias` 构建alias对象 参数:alias数组 `function: JPush/Model/registration_id` 构建registration_id对象 参数:registration_id数组 Example: ```php $payload->setAudience(M\audience( M\tag(array('tag1','tag2')), M\alias(array('alias1', 'alias2'), M\alias(array("alias1", "alias2")), M\registration_id(array("id1", "id2")))); ``` or: ```php $payload->setAudience(M\audience(array("tag1", "tag2"))); ``` 推送给所有用户: ```php $payload->setAudience(M\all); ``` ### Notification Selectors `function: JPush/Model/notification($alert /* args */)` 构建notification对象 参数:$alert, ios(),android(),winphone()构建的对象 `function: JPush/Model/ios($alert, $sound=null, $badge=null, $contentAvailable=null, $extras=null)` 构建ios对象 `function: JPush/Model/android($alert, $title=null, $builder_id=null, $extras=null, $category=null)` 构建android对象 `function: JPush/Model/winphone($alert, $title=null, $_open_page=null, $extras=null)` 构建winphone对象 Example: 所有平台都推送同一通知 ```php $payload->setNotification(notification('Hi,JPush')); ``` 对象不同平台的通知,需要注意以下几点: 1. 设置ios消息时,默认sound='',如果不需要sound,请指定sound为M\disableSound. 2. 设置ios消息时,默认badge=1,如果不需要badge,请指定badge为M\disableBadge. ```php $payload->setNotification(M\notification('Hi, JPush', M\android('Hi, android'), M\ios('Hi, ios', 'happy', 1, true))); ``` ### Message Selectors `function: JPush/Model/message($msg_content, $title=null, $content_type=null, $extras=null)` 构建message对象 Example: ```php $payload->setMessage(M\message('msg content', null, null, array('key'=>'value'))); ``` ### Options Selectors `function: options($sendno=null, $time_to_live=null, $override_msg_id=null, $apns_production=null, $big_push_duration=null)` 构建options对象 |PARAMS|DESCRIPTION|REQUIRE| |----|----|----| |sendno|-|false| |time_to_live|离线消息保留时长(秒)。如果不填默认 1 天。不能小于 0|false| |override_msg_id|要覆盖的消息ID。必须大于 0|false| |apns_production|APNs 是否生产环境推送。默认为 True|false| |big_push_duration|大推送指定时长。规定应在这个时间内推送完成,用于“定速推送,单位:分钟|false| Example: ```php $payload->setOptions(M\options(123456, null, null, false, 60)) ``` ### Vaildate | Method | Description | | ------- | ------ | | isIosExceedLength | 检测当前payload是否超出ios notification长度限定。返回true/false。(ios notification不超过220并且ios notification + message不超过1200) | | isGlobalExceedLength | 检测当前payload是否超出长度限定。返回true/false。(ios notification不超过220并且所有平台的notification + message不超过1200) | ## Report API `function: JPush\JPushClient::report($msg_ids)` 获取统计信息,msg_ids为推送API返回的 msg_id 列表,多个 msg_id 用逗号隔开,最多支持100个msg_id。具体细节可参考 [Report API][2] 返回:ReportREsponse 对象 Example: ```php require_once 'vendor/autoload.php'; use JPush\Model as M; use JPush\JPushClient; use JPush\Exception\APIConnectionException; use JPush\Exception\APIRequestException; $br = '
'; $client = new JPushClient($app_key, $master_secret); try { $msg_ids = '1931816610,1466786990,1931499836'; $result = $client->report($msg_ids); foreach($result->received_list as $received) { echo '---------' . $br; echo 'msg_id : ' . $received->msg_id . $br; echo 'android_received : ' . $received->android_received . $br; echo 'ios_apns_sent : ' . $received->ios_apns_sent . $br; } } catch (APIRequestException $e) { echo 'Push Fail.' . $br; echo 'Http Code : ' . $e->httpCode . $br; echo 'code : ' . $e->code . $br; echo 'message : ' . $e->message . $br; echo 'Response JSON : ' . $e->json . $br; echo 'rateLimitLimit : ' . $e->rateLimitLimit . $br; echo 'rateLimitRemaining : ' . $e->rateLimitRemaining . $br; echo 'rateLimitReset : ' . $e->rateLimitReset . $br; } catch (APIConnectionException $e) { echo 'Push Fail.' . $br; echo 'message' . $e->getMessage() . $br; } ``` `function: JPush\JPushClient::messages($msg_ids)` 获取指定msg_ids的详细统计报告,msg_ids为推送API返回的 msg_id 列表,多个 msg_id 用逗号隔开,最多支持100个msg_id。具体细节可参考 [Report API][2] `function: JPush\JPushClient::users($time_unit, $start, $duration)` 获取当前应用指定时间段内的用户统计数据 * time_unit 时间单位,有 3 个可选:HOUR, DAY, MONTH (这三个字串有效,兼容大小写) * start 起始时间。根据 time_unit 不同,有效值是不同的。取一般的年月日时字符串形式,比如 "2014-06-06 12",即年月日用 "-" 隔开,时用空格隔开。 * duration 基于起始时间的步长。即从起始时间开始持续多久。只支持查询60天以内的用户信息。 ## Device API `function: JPush\JPushClient::getDeviceTagAlias($registrationId)` 获取指定RegistrationId的所有属性,包含tags, alias `function: JPush\JPushClient::removeDeviceTag($registrationId)` 移除指定RegistrationId的所有tag `function: JPush\JPushClient::removeDeviceAlias($registrationId)` 移除指定RegistrationId的所有alias `function: JPush\JPushClient::updateDeviceTagAlias($registrationId, $alias = null, $addTags = null, $removeTags = null)` 更新指定RegistrationId的指定属性,当前支持tags, alias `function: JPush\JPushClient::getTags()` 获取当前应用的所有标签列表 `function: JPush\JPushClient::isDeviceInTag($registrationId, $tag)` 查询某个用户是否在tag下 `function: JPush\JPushClient::updateTagDevices($tag, $addDevices = null, $removeDevices = null)` 对指定tag添加或者删除registrationId `function: JPush\JPushClient::deleteUpdate($tag)` 删除指定Tag,以及与其关联的用户之间的关联关系 `function: JPush\JPushClient::getAliasDevices($alias, $platform = null)` 获取指定alias下的用户,最多输出10个 `function: JPush\JPushClient::deleteAlias($alias)` 删除指定alias,以及该alias与用户的绑定关系 ## Validate API 与Push API调用方法一致,但最终不执行推送操作 Example: ``` $result = $client->push() ->setPlatform(M\all) ->setAudience(M\all) ->setNotification(M\notification('Hi, JPush')) ->setAudience(M\audience(array('no one'))) ->printJSON() ->validate(); ``` [1]: http://docs.jpush.cn/display/dev/Push-API-v3#Push-API-v3-%E6%8E%A8%E9%80%81%E5%AF%B9%E8%B1%A1 [2]: http://docs.jpush.cn/display/dev/Report-API