103 lines
3.4 KiB
PHP
103 lines
3.4 KiB
PHP
<?php
|
||
namespace App\Services;
|
||
use JPush\Client;
|
||
use Log;
|
||
|
||
class JpushService
|
||
{
|
||
/**
|
||
* 初始化 JPushClient
|
||
* @param $app
|
||
* @return Client
|
||
*/
|
||
public static function newJpushClient($app)
|
||
{
|
||
if ($app == 'android') {
|
||
$appKey = config('Jpush.android_app_key');
|
||
$master = config('Jpush.android_master_secret');
|
||
} elseif ($app == 'ios') {
|
||
$appKey = config('Jpush.ios_app_key');
|
||
$master = config('Jpush.ios_master_secret');
|
||
} else {
|
||
return 'APP类型错误';
|
||
}
|
||
$log_path = config('Jpush.log_file');
|
||
$client = new Client($appKey, $master, $log_path);
|
||
return $client;
|
||
}
|
||
|
||
/**
|
||
* android 或 ios 通过 别名 给单个设备或多个设备推送消息
|
||
* @param $params
|
||
* @return array
|
||
*/
|
||
public static function androidOrIosPushByAlias($params)
|
||
{
|
||
// 推送平台
|
||
$platform = array_get($params, 'platform');
|
||
// 推送标题
|
||
$title = array_get($params, 'title');
|
||
// 推送内容
|
||
$content = array_get($params, 'content');
|
||
// 通知栏样式 ID
|
||
$builderId = array_get($params, 'builderId');
|
||
// 附加字段 (可用于给前端返回,进行其他业务操作,例如:返回orderId,用于点击通知后跳转到订单详情页面)
|
||
$extras = array_get($params, 'extras');
|
||
// 推送目标 (别名)
|
||
$alias = array_get($params, 'alias');
|
||
// 唤醒APP路径
|
||
$intent = array_get($params, 'intent');
|
||
$uri_activity = array_get($params, 'uri_activity');
|
||
$uri_action = array_get($params, 'uri_action');
|
||
|
||
// 推送目标 (注册ID)
|
||
$registrationId = array_get($params, 'registrationId');
|
||
// 推送类型 (1-别名 2-注册id 3-全部(ios 或 android))
|
||
$type = array_get($params, 'type');
|
||
|
||
// 返回一个推送 Payload 构建器
|
||
$push = self::newJpushClient($platform)->push();
|
||
|
||
$push->setPlatform($platform);
|
||
switch ($type) {
|
||
// 通过别名推送
|
||
case 1:
|
||
$push->addAlias($alias);
|
||
break;
|
||
// 通过注册 ID 推送
|
||
case 2:
|
||
$push->addRegistrationId($registrationId);
|
||
break;
|
||
// 推送全部(android 或 ios)
|
||
case 3:
|
||
$push->addAllAudience();
|
||
break;
|
||
}
|
||
|
||
$push->androidNotification($content, [ // android 通知
|
||
"title" => $title,
|
||
"builder_id" => $builderId,
|
||
"extras" => $extras,
|
||
"intent" => $intent,
|
||
"uri_activity" => $uri_activity,
|
||
"uri_action" => $uri_action,
|
||
])->iosNotification($content, [ // ios 通知
|
||
"sound" => "sound", // 通知提示声音,如果无此字段,则此消息无声音提示;
|
||
"badge" => "+1", // 应用角标(APP右上角的数字)0 清除 默认 +1
|
||
"extras" => $extras,
|
||
])->options([ // 推送参数
|
||
'apns_production' => config('Jpush.environment') // APNs 是否生产环境 (ios)
|
||
]);
|
||
|
||
$response = $push->send();
|
||
|
||
if ($response['http_code'] != 200) {
|
||
// compact('response', 'type', 'platform', 'alias', 'registrationId', 'title', 'content')
|
||
// );
|
||
}
|
||
|
||
return $response;
|
||
}
|
||
}
|
||
|