前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手机APP消息推送极光推送jpush-php实例

手机APP消息推送极光推送jpush-php实例

原创
作者头像
OwenZhang
发布2022-01-14 09:35:51
2.4K0
发布2022-01-14 09:35:51
举报
文章被收录于专栏:Owen's World

本文环境 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 安装
代码语言:javascript
复制
执行 $ php composer.phar install 或 $ composer install 进行安装。
直接下载源码安装

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

  • 下载源代码包,解压到项目中
  • 在项目中引入 autoload:
代码语言:javascript
复制
require 'path_to_sdk/autoload.php';

代码实例

推送接口父类

application/common/JPush.php
代码语言:javascript
复制
<?php
/**
 * 极光推送
 */
namespace app\common;

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

代码语言:javascript
复制
<?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');
            var_dump($push);
        } catch (\Exception $e) {
            var_dump($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
代码语言:javascript
复制
//调用推送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);
初始化
代码语言:javascript
复制
use JPush\Client as JPush;
...
...

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

...

OR

代码语言:javascript
复制
$client = new \JPush\Client($app_key, $master_secret);
简单推送
代码语言:javascript
复制
$client->push()
    ->setPlatform('all')
    ->addAllAudience()
    ->setNotificationAlert('Hello, JPush')
    ->send();
异常处理
代码语言:javascript
复制
$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 中的示例代码:

代码语言:javascript
复制
# 假定当前目录为 JPush 源码所在的根目录
$ php examples/push_example.php

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

测试
代码语言:javascript
复制
# 编辑 tests/bootstrap.php 文件,填入必须的变量值
# OR 设置相应的环境变量

# 运行全部测试用例
$ composer tests

# 运行某一具体测试用例
$ composer tests/JPush/xxTest.php

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • jpush/jpush介绍
  • jpush/jpush下载
    • 使用 Composer 安装
      • 直接下载源码安装
      • 代码实例
        • 推送接口父类
          • application/common/JPush.php
        • 推送服务类
          • application/lucky/push/service/PushService.php
            • 推送实例
              • application/lucky/admin/controller/Blog.php
              • 初始化
              • 简单推送
              • 异常处理
            • 推送生产例子
              • 测试
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档