IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 手机APP消息推送极光推送jpush-php实例 -> 正文阅读

[PHP知识库]手机APP消息推送极光推送jpush-php实例

2022 年什么会火?什么该学?本文正在参与“聊聊 2022 技术趋势”征文活动?」

本文环境 ThinkPHP5.0,PHP7.1,Mysql5.7\ 不懂的可以评论或联系我邮箱:owen@owenzhang.com\ 著作权归OwenZhang所有。商业转载请联系OwenZhang获得授权,非商业转载请注明出处。

jpush/jpush介绍

这是 JPush REST API 的 PHP 版本封装开发包,是由极光推送官方提供的,一般支持最新的 API 功能。

对应的 REST API 文档:???https://docs.jiguang.cn/jpush/server/push/server_overview/??

支持的 PHP 版本: 5.3.3 ~ 5.6.x, 7.x

若需要兼容 PHP 5.3.3 以下版本,可以使用???v3 分支的代码???。 因为运行 Composer 需要 PHP 5.3.2+ 以上版本,所以其不提供 Composer 支持, 也可以??点击链接??下载 v3.4.x 版本源码。

jpush/jpush下载

使用 Composer 安装

执行 $ php composer.phar install 或 $ composer install 进行安装。

直接下载源码安装

直接下载源代码也是一种安装 SDK 的方法,不过因为有版本更新的维护问题,所以这种安装方式十分不推荐,但由于种种原因导致无法使用 Composer,所以我们也提供了这种情况下的备选方案。

  • 下载源代码包,解压到项目中
  • 在项目中引入 autoload:

require 'path_to_sdk/autoload.php';

代码实例

推送接口父类

application/common/JPush.php

```

use JPush\Client;

class JPush { private $key = ''; private $secret = '';

use InstanceTrait;

public function _init()
{
    $this->key = '3412f';
    $this->secret = '2c23';
}

/**
 * 指定注册ID发送
 */
public function push($registrationId, $title, $text, $url, $itemId)
{
    $registrationId = array_filter($registrationId);
    \Log::info(var_export([$registrationId, $title, $text, $url, $itemId], true));
    $this->_init();

    $client = new Client($this->key, $this->secret);
    $push = $client->push();

    $push->setPlatform('all');
    $push->addRegistrationId($registrationId);
    $push->addAndroidNotification($title, $text);
    $push->androidNotification($text, ['title' => $title, 'alert_type' => 2, 'extras' => ['url' => $url, 'id' => $itemId]]);
    $push->iosNotification(['title' => $title, 'body' => $text], ['extras' => ['url' => $url, 'id' => $itemId]]);
    $push->options(['apns_production' => false]);
    $push->send();
}

} ```

推送服务类

application/lucky/push/service/PushService.php

```

namespace app\lucky\push\service;

use app\common\JPush; use app\lucky\follow\service\FollowService; use app\lucky\push\model\UserPushConfigModel; use app\lucky\subscribe\service\SubscribeService; use app\sports\match\service\FollowMatchService; use app\sports\match\service\SportsApiService;

class PushService { public function push() { try { $push = JPush::getInstance()->push(['1517badf006e81e'], '我是标题', '我是内容', 'GameDetails:1909991'); vardump($push); } catch (\Exception $e) { vardump($e->getMessage()); }

}

/**
 * 推送设置
 */
public function pushConfig($userId, $sys, $ext)
{
    $userPushConfigModel = new UserPushConfigModel();
    $result = $userPushConfigModel->updateConfig($userId, $sys, ['ext' => json_encode($ext), 'update_time' => time()]);

    if ($result) {
        return ['code' => 0, 'msg' => '添加成功'];
    }

    return ['code' => -1, 'msg' => '添加失败'];
}

/**
 * 获取配置
 */
public function getPushConfig($userId, $sys)
{
    $userPushConfigModel = new UserPushConfigModel();
    $result = $userPushConfigModel->getConfigByUserId($userId, $sys);
    $data = isset($result['ext']) ? $result['ext'] : '';
    $data = (array)json_decode($data, true);

    return ['code' => 0, 'msg' => '获取成功', 'data' => $data];
}


/**
 * 发布资讯推送
 */
public function blogPush($authorId, $title, $text, $blogId)
{
    //获取作者的粉丝列表ID
    $followService = new FollowService();
    $followListId = $followService->getAuthorFollowList($authorId, 'sports');

    //获取用户ID的配置
    $pushModel = new UserPushConfigModel();
    $pushConfig = $pushModel->getConfigByUserIdArr($followListId, 'sports');

    $identifyArr = [];
    foreach ($pushConfig as $value) {
        $ext = (array)json_decode($value['ext'], true);
        if (in_array('information', $ext)) {
            $identifyArr[] = $value['identify'];
        }
    }

    if (!empty($identifyArr)) {
        try {
            JPush::getInstance()->push($identifyArr, $title, $text, 'InfoDetails', $blogId);
        } catch (\Exception $exception) {
            \Log::error($exception->getMessage());
        }
    }
}



/**
 * 登录关联极光ID
 */
public function loginLinkPush($userId, $identify, $sys = '343')
{
    $userPushConfigModel = new UserPushConfigModel();
    $config = $userPushConfigModel->getConfigByUserId($userId, 'sports');

    if (empty($config)) {
        $data = [
            'user_id' => $userId,
            'identify' => $identify,
            'update_time' => time(),
            'sys' => $sys,
            'ext' => json_encode(['start' => true, 'end' => true, 'score' => true, 'news' => true, 'information' => true])
        ];

        $result = $userPushConfigModel->addConfig($data);
        if (empty($result)) {
            return ['code' => -1, 'msg' => '添加极光推送失败'];
        }

        return ['code' => 0, 'msg' => '添加极光推送成功'];
    }

    $data = [
        'identify' => $identify,
        'update_time' => time(),
    ];
    $result = $userPushConfigModel->updateConfig($userId, $sys, $data);
    if (empty($result)) {
        return ['code' => -1, 'msg' => '更新极光推送失败'];
    }

    return ['code' => 0, 'msg' => '更新极光推送成功'];
}

/**
 * 退出登录关联极光ID
 */
public function logoutLinkPush($userId, $sys = '343')
{
    $userPushConfigModel = new UserPushConfigModel();
    $data = [
        'identify' => '',
        'update_time' => time(),
    ];
    $result = $userPushConfigModel->updateConfig($userId, $sys, $data);
    if (empty($result)) {
        return ['code' => -1, 'msg' => '退出登录,更新极光推送失败'];
    }

    return ['code' => 0, 'msg' => '退出登录,更新极光推送成功'];
}

} ```

推送实例

application/lucky/admin/controller/Blog.php

//调用推送APP PUSH $data['author_id']=123; $data['title']='文章标题今天三美好的一天'; $title = '张三发布资讯'; $pushService = new PushService(); $pushService->blogPush($data['author_id'], $title, mb_substr($data['title'], 0, 10) . '...', $result);

初始化

``` use JPush\Client as JPush; ... ...

$client = new JPush($app_key, $master_secret);

... ```

OR

$client = new \JPush\Client($app_key, $master_secret);

简单推送

$client->push() ->setPlatform('all') ->addAllAudience() ->setNotificationAlert('Hello, JPush') ->send();

异常处理

$pusher = $client->push(); $pusher->setPlatform('all'); $pusher->addAllAudience(); $pusher->setNotificationAlert('Hello, JPush'); try { $pusher->send(); } catch (\JPush\Exceptions\JPushException $e) { // try something else here print $e; }

推送生产例子

注意: 这只是使用样例, 不应该直接用于实际环境中!!

在下载的中的???examples???文件夹有简单示例代码, 开发者可以参考其中的样例快速了解该库的使用方法。

简单使用方法

先填写对应的appKey和masterSecret,可以额外设定Registration_id。

若要运行 push_example.php 中的示例代码:

```

假定当前目录为 JPush 源码所在的根目录

$ php examples/push_example.php ```

同时也可编辑相关的示例文件,更改参数查看执行效果

测试

```

编辑 tests/bootstrap.php 文件,填入必须的变量值

OR 设置相应的环境变量

运行全部测试用例

$ composer tests

运行某一具体测试用例

$ composer tests/JPush/xxTest.php ```

Buy me a cup of coffee :)

觉得对你有帮助,就给我打赏吧,谢谢!

微信赞赏码链接,点击跳转:

https://www.owenzhang.com/wechat_reward.png

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 12:49:24  更:2022-01-16 12:50:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/14 14:31:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码