在写API的时候,经常需要给客户端发送通知,这时候我们需要接入极光推送,后端发送请求到极光,极光再根据服务端发送的数据,推送到相应的设备。
安装方法:
composer require jpush/jpush
代码封装:
/** * 极光推送 * @param string $title 推送标题 * @param string $message 推送消息 * @param string $users 要推送的用户,[]全推 * @param string $tag tag,客户端用于区分的页面 * @param string $extras 传递给客户端的扩展参数 */ if(!function_exists('jPush')){ function jPush($title, $message, $users=[], $tag=1, array $extras=[]){ if(!$title || !$message || !$users){ return false; } //是否全推,all:全推 $pushAll = false; if(!$users){ $pushAll = true; } //推送用户转为数组 if(!is_array($users)){ $users = explode(",", $users); } foreach ($users as $key => $user){ $users[$key] = (string)$user; } $config = get_config('jpush'); $appKey = $config['jpush_appkey']; $secret = $config['jpush_secret']; //JPush $client = new \JPush\Client($appKey, $secret ,null);//第三个参数null,可解决极光推送抛出异常终止程序运行的问题 $cliObj = $client->push() ->setPlatform(['android', 'ios']); if($pushAll){ $cliObj = $cliObj->addAllAudience();//全推 }else{ $cliObj = $cliObj->addTag($users);//群推 } $response = $cliObj->androidNotification($message, [ 'title' => $title, 'extras' => [//自定义 'eventTag' => $tag, 'data_'.$tag => $extras ] ]) ->iosNotification($message, [ 'badge' => '+1', 'extras' => [//自定义 'eventTag' => $tag, 'data_'.$tag => $extras ] ]) ->options(['apns_production'=>true]); try { $response->send(); } catch (\JPush\Exceptions\JPushException $e) { return false; } return $response; } }
调用方法:
jPush('咨询来了', '您有一个新的咨询请求,请您查收!', [], 99, ["content"=>""]);