在 Laravel 5.6 中集成并使用极光推送

最近在项目中需要用到推送,抽出时间看了看极光推送,记录一下
Github 地址
Push API 地址
极光推送官方文档地址

环境

  • PHP 7.1.29
  • Laravel 5.6

安装 Jpush

composer.json 文件中的 require 下添加 "jpush/jpush": "^3.6"

"require": {
        "jpush/jpush": "^3.6",
},

执行命令:composer install

配置

config 目录下新建文件 Jpush.php 并进行如下配置:

return [
	'android_app_key' => env('JPUSH_APP_KEY'),
	'android_master_secret' => env('JPUSH_APP_MASTER_SECRET'),
	
	'ios_app_key' => env('JPUSH_IOS_KEY'),
	'ios_master_secret' => env('JPUSH_IOS_MASTER_SECRET'),
	
	// 环境 true-生产环境 false-开发环境
	'environment' => env('JPUSH_APNS_PRODUCTION', true),
];

.env 文件进行如下配置:

JPUSH_APP_KEY=极光推送的app_key(android)
JPUSH_APP_MASTER_SECRET=极光推送的master_secret(android)
JPUSH_IOS_KEY=极光推送的app_key(ios)
JPUSH_IOS_MASTER_SECRET=极光推送的master_secret(ios)
JPUSH_APNS_PRODUCTION=true

使用

Modules 目录下新建目录 Jpush,然后在 Jpush 目录下新建文件 JpushService.php 内容如下:

<?php
namespace App\Modules\Jpush;

use App\BaseService;
use App\Exceptions\BaseResponseException;
use JPush\Client;
use Log;

class JpushService extends BaseService
{
    /**
     * 初始化 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 {
            throw new BaseResponseException('APP类型错误');
        }
        $client = new Client($appKey, $master);
        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');
        // 推送目标 (注册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,
        ])->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) {
            Log::info('推送失败 by alias',
                compact('response', 'type', 'platform', 'alias', 'registrationId', 'title', 'content')
            );
        }

        return $response;
    }
}

新建路由:

// 手动推送测试(极光推送)
Route::post('message/jpush', 'MessageController@testJpush');

新建控制器并添加方法如下:

  /**
    * 手动测试推送(极光推送)
    */
   public function testJpush()
   {
       // 推送平台 ios android
       $params['platform'] = 'android';
       // 推送标题
       $params['title'] = '恭喜您中奖了!';
       // 推送内容
       $params['content'] = '恭喜您中奖了!500万元大奖哦!';
       // 通知栏样式 ID
       $params['builderId'] = 1;
       // 附加字段(这里自定义 Key / value 信息,以供业务使用)
       $params['extras'] = [
           'orderid' => 13545,
       ];
       // 推送类型 1-别名 2-注册id 3-全部
       $params['type'] = 1;

       // 注册ID 可以是单个 也可以是 数组
       // $params['registrationId'] = '170976fsdas554ewerr98f28';
       // or
       // $params['registrationId'] = [
       //     '170976fsdas554ewerr98f28',
       //     '120c8545we15we46b8929e'
       // ];

       // 别名 可以是单个 也可以是 数组
       // $params['alias'] = '51651545154';
       // or
       // $params['alias'] = [
       //     '51651545154',
       //     '61654564897',
       // ];

       // 开始推送
       $data = JpushService::startPush($params);

       dd($data);
   }

最后,请求该测试方法,得到返回结果如下:

返回结果

android测试

ios测试

本文只用到了最常用的通知栏推送,如需其他方式请参考 官方文档

以上方法在 android demo 以及 ios 真机测试过,可用,Good Luck,Thanks♪(・ω・)ノ。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值