本文实例讲述了laravel框架使用极光推送消息。分享给大家供大家参考,具体如下:

最近需要使用极光推送往客户端推消息,所以这里记录下使用过程。

极光推送的服务端文档:

https://docs.jiguang.cn/jpush/server/push/server_overview/

极光推送服务端PHP代码:

https://github.com/jpush/jpush-api-php-client

在laravel项目下安装极光推送

composer require jpush/jpush

我们在config目录下创建一个jpush.php文件,用于获取key和secret

return [

'app_key' => env('JPUSH_APP_KEY', ''),

'master_secret' => env('JPUSH_MASTER_SECRET', ''),

'apns_production' => env('JPUSH_APNS_PRODUCTION', true),

];

然后在 .env 文件中配置相应参数

JPUSH_APP_KEY=

JPUSH_MASTER_SECRET=

JPUSH_APNS_PRODUCTION=true

然后我们在app目录下,创建一个 Services目录,并创建JPushService.php

namespace App\Services;

use JPush\Client as JPush;

use Log;

class JPushService

{

protected static $client = null;

//推送类型

const PUSH_TYPE_ALL = 1;

const PUSH_TYPE_TAG = 2;

const PUSH_TYPE_ALIAS = 3;

const PUSH_TYPE_REG_ID = 4;

private function __construct()

{

}

private function __clone()

{

}

/**

* 获取实例

*/

public static function getInstance()

{

if (!self::$client) {

self::$client = new JPush(config('jpush.app_key'), config('jpush.master_secret'), null);

}

return self::$client;

}

/**

* 给android或ios推送消息

*/

public static function pushNotify($params)

{

//推送平台

$platform = $params['platform'] ?? 'all';

//推送标题

$title = $params['title'] ?? '';

//推送内容

$content = $params['content'] ?? '';

//通知栏样式ID

$builder_id = $params['builder_id'] ?? 0;

//附加字段

$extras = $params['extras'] ?? '';

//推送类型

$type = $params['type'] ?? '';

//推送目标(注册ID)

$reg_id = $params['reg_id'] ?? '';

//推送目标(标签)

$tag = $params['tag'] ?? '';

//推送目标(别名)

$alias = $params['alias'] ?? '';

try {

$push = self::getInstance()->push();

//设置平台

$push->setPlatform($platform);

switch ($type) {

case self::PUSH_TYPE_ALL:

$push->addAllAudience();

break;

case self::PUSH_TYPE_TAG:

$push->addTag($tag);

break;

case self::PUSH_TYPE_ALIAS:

$push->addAlias($alias);

break;

case self::PUSH_TYPE_REG_ID:

$push->addRegistrationId($reg_id);

break;

}

$push->androidNotification($content, [

'title' => $title,

'builder_id' => $builder_id,

'extras' => $extras,

])->iosNotification($content, [

'sound' => 'sound',

'badge' => '+1',

'extras' => $extras

])->options([

'apns_production' => config('jpush.apns_production', true),

//表示离线消息保留时长(秒)

'time_to_live' => 86400,

]);

$response = $push->send();

if ($response['http_code'] != 200) {

Log::channel('jpush')->error(json_encode($response, JSON_UNESCAPED_UNICODE));

}

return $response;

} catch (\Throwable $e) {

Log::channel('jpush')->error(json_encode([

'file' => $e->getFile(),

'line' => $e->getLine(),

'message' => $e->getMessage(),

'params' => $params,

], JSON_UNESCAPED_UNICODE));

}

}

/**

* 获取指定设备的别名和标签

*/

public static function getDevices($reg_id)

{

$response = self::getInstance()->device()->getDevices($reg_id);

if ($response['http_code'] == 200) {

return $response['body'];

}

return [];

}

/**

* 给指定设备添加标签

*/

public static function addTags($reg_id, $tags = [])

{

$response = self::getInstance()->device()->addTags($reg_id, $tags);

if ($response['http_code'] == 200) {

return true;

}

return false;

}

/**

* 清空指定设备的标签

*/

public static function clearTags($reg_id)

{

$response = self::getInstance()->device()->clearTags($reg_id);

if ($response['http_code'] == 200) {

return true;

}

return false;

}

/**

* 清空指定设备的标签

*/

public static function removeTags($reg_id, $tags = [])

{

$response = self::getInstance()->device()->removeTags($reg_id, $tags);

if ($response['http_code'] == 200) {

return true;

}

return false;

}

/**

* 更新指定设备的别名

*/

public static function updateAlias($reg_id, $alias)

{

$response = self::getInstance()->device()->updateAlias($reg_id, $alias);

if ($response['http_code'] == 200) {

return true;

}

return false;

}

}

创建完后,我们就可以在项目中调用 JPushService::pushNotify() 来推消息了。

JPushService::pushNotify([

//标题

'title' => '测试',

//内容

'content' => '测试',

//设备标识,跟设备相关

'reg_id' => 'xxxxxxxxxxx',

//扩展字段

'extras' => [

'key' => 'value',

],

//推送类型

'type' => JPushService::PUSH_TYPE_REG_ID,

]);

reg_id是前端安卓或IOS获取到后,传给PHP后端,然后跟用户关联,存起来。

注意,reg_id是跟设备相关的,同一个设备上的APP,当不同用户登陆时,reg_id是一样的,这样会导致一个问题。

A用户登APP后,又切换到B用户,那B用户会收到发送给A用户的消息,这会造成消息错乱。

解决方法:

通过别名来发送消息,因为一个设备只能绑定一个别名,当A用户登陆时,把 reg_id 绑定到别名 user_a,切换用户或退出时,就把别名置空。

然后B用户登陆,就把 reg_id 绑定到 user_b 上。推消息时,就通过别名来推送消息。

绑定别名(推荐使用用户ID来区分不同的别名):

JPushService::updateAlias($user->jpush_reg_id, 'user_id_' . $user->id);

置空别名:

JPushService::updateAlias($user->jpush_reg_id, '');

通过别名发送:

JPushService::pushNotify([

'title' => '测试',

'content' => '测试',

'alias' => 'user_id_' . $message->receive_id,

'extras' => $extras,

'type' => JPushService::PUSH_TYPE_ALIAS,

]);

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

极光 php 自定义消息,laravel框架使用极光推送消息操作示例相关推荐

  1. php极光推送教程,laravel框架使用极光推送消息操作示例

    本文实例讲述了laravel框架使用极光推送消息.分享给大家供大家参考,具体如下: 最近需要使用极光推送往客户端推消息,所以这里记录下使用过程. 极光推送的服务端文档: https://docs.ji ...

  2. 友盟小米收不到推送消息_一个轻量级、可插拔的Android消息推送框架。一键集成推送(极光推送、友盟推送、华为、小米推送等)...

    XPush 一个轻量级.可插拔的Android消息推送框架.一键集成推送(极光推送.友盟推送.华为.小米推送等),提供有效的保活机制,支持推送的拓展,充分解耦推送和业务逻辑,解放你的双手! 在提iss ...

  3. Android端推送消息之极光推送

    推送方式 轮询 --实现方式: 周期性主动获取网络中的数据; --缺点: 费电, 费流量; SMS --实现方式: 服务器端向手机端发送短信, 手机监听短信广播, 将拦截的短信信息进行显示; --优点 ...

  4. Android之集成极光推送消息

    极光推送是为 App 提供第三方推送服务的平台之一,它提供四种消息形式: 通知 自定义消息 富媒体 本地通知 1.通知 Push Notification,即指在手机的通知栏(状态栏)上会显示的一条通 ...

  5. 极光推送:java后台向APP推送消息(android,ios极光推送消息)

    Maven添加依赖 <!--极光推送--><dependency><groupId>cn.jpush.api</groupId><artifact ...

  6. 极光推送:后台向APP:android,ios极光推送消息

    1. 添加依赖 //jpushcompile group: 'cn.jpush.api', name: 'jpush-client', version: '3.3.4' 2. 注册极光用户 //APP ...

  7. 用JPUSH极光推送实现服务端向安装了APP应用的手机推送消息(C#服务端接口)

    这次公司要我们做一个功能,就是当用户成功注册以后,他登录以后要收到消息,当然这个消息是安装了我们的手机APP应用的手机咯. 极光推送的网站的网址是:https://www.jpush.cn/ 极光推送 ...

  8. 极光推送收不到推送消息

    极光推送收不到推送消息 问题 解决 猜测为什么会出现问题 问题 sdk版本号: // 极光推送 compile 'cn.jiguang.sdk:jpush:3.1.6' // 此处以JPush 3.1 ...

  9. android极光推送 消息穿透广告弹窗,极光推送弹出两次消息,请大佬们帮忙指点迷津...

    本帖最后由 m143 于 2021-3-19 11:55 编辑 1.打开APP ,从后端发送推送,APP连续收到2条推送信息2. 打开APP ,APP在后台运行,从后端发送推送(收到一条消息),点击消 ...

最新文章

  1. 甲小姐对话稚晖君:深度学习并非AI的终点
  2. 移动通信网络中的数字基带
  3. 【数字信号处理】序列傅里叶变换 ( 狄义赫利条件 | 序列傅里叶变换定义 )
  4. linux命令find
  5. 7.10.7740.16
  6. Android 第四课 活动的启动模式
  7. 使用Blink CEP实现差值聚合计算
  8. openfire php注册,openfire php 初始配置
  9. C++ 空间配置器(allocator)
  10. whereis linux用法,whereis命令使用详解
  11. 相比 Windows 为什么越来越多人选择Linux?
  12. python安装后无法打开文本_Python 安装zbar-py时出现 无法打开包括文件: “unistd.h” no such file or directory...
  13. 啊哈C语言 第三章 【代码】【习题答案】
  14. 安卓开发之ListView优化方案
  15. linux安装富士施乐打印机驱动下载,Ubuntu 8.04下安装Xerox打印机记录
  16. python光流法算法学习
  17. m选n组合的两种算法(C语言实现)
  18. 天线发射功率计算公式_天线增益的定义/计算公式/发射功率
  19. 在framework下新建系统api
  20. 3 4j不是合法的python表达式_3+4j不是合法的Python表达式。

热门文章

  1. 详细解读Volley(二)—— ImageRequest Request简介
  2. careercup-中等难度 17.5
  3. Android draw9patch点九图常识
  4. 【ASP.NET】js动态生成的控件,在后台获取不到怎么办?
  5. MYSQL ROOT权限丢失的解决方法
  6. 网管日志-06.08.10
  7. 擒贼先擒王,简单谈一下JavaScript作用域链(Scope Chain)
  8. 利用正则表达式去除所有html标签,只保留文字
  9. ubuntu16.04 安装以及要做的事情
  10. Des和Base64的Util