博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ThinkPHP 3.2.x 集成极光推送指北
阅读量:6327 次
发布时间:2019-06-22

本文共 4352 字,大约阅读时间需要 14 分钟。

hot3.png

3.2版本已经过了维护生命周期,官方已经不再维护,请及时更新至5.0版本 ——

以上,如果有条件,请关闭这个页面,然后升级至 ThinkPHP 5,如果由于各种各样的原因无法升级至 TP 5 ,请往下看。另外本指南使用环境为 Linux/Mac,若开发环境为 Windwos,则或许可能会有某些问题,如果有任何问题,欢迎在下方评论区留言讨论。

参考文档:

由于 ThinkPHP 3.2 已经支持了 Composer,因此本指南分为使用 Composer不使用 Composer 两部分。

使用 Composer

ThinkPHP 3.2 已经全面支持了 Composer ,所以使用 Composer 来集成极光推送则成为首选的方式。如果不熟悉 Composer,可以去 了解详情,本篇将不会涉及到 Composer 的安装与使用(默认已经全局安装了最新版本的 Composer )。

一. 获取 ThinkPHP

在工作目录下运行 $ composer create-project topthink/thinkphp tp-demo

二. 初次运行 ThinkPHP

初次运行之前的 Application 目录

$ cd tp-demo && php -S 127.0.0.1:4000

打开浏览器输入地址:127.0.0.1:4000,若结果如下则说明 ThinkPHP 3.2.3 一切 OK。

初次运行

PS: 另外 ThinkPHP 的应用支持使用命令行访问,其访问规则是: $ php index.php(或其它应用入口文件) 模块/控制器/操作/[参数名/参数值...]

windows 下则为: > php.exe index.php(或其它应用入口文件) 模块/控制器/操作/[参数名/参数值...]

在命令行下运行一下,其输出是:

cli

再回头看一下 Application 目录,可以看到自动生成了公共模块 Common、默认的 Home 模块和 Runtime 运行时目录(非模块):

Application 目录初次运行之后

三. 获取 JPush PHP Api Client 官方插件

项目地址:

0 . 编辑项目根目录下的 composer.json 配置文件,添加 JPush 插件依赖:

"require": {  "php": ">=5.3.0",  "jpush/jpush": "v3.5.*"},

1 . 运行 $ composer install or $ composer update 安装或更新插件 。 2 . 没有第 2 步。

<a id='config'>四. 配置 JPush</a>

两个相关问题:

编辑 Application/Common/Conf/config.php 文件

'your app_key', 'JPUSH_MASTER_SECRET' => 'your master_secret');

OR

array( 'APP_KEY' => 'your app_key', 'MASTER_SECRET' => 'your master_secret' ));

一维数组和二维数组的配置都可以,只是加载的时候使用不同的参数而已 C('JPUSH_APP_KEY') or C('JPUSH.APP_KEY),个人比较喜欢二维数组,所以下面都以二维数组来示例。

五. 测试 JPush

首先习惯性的在 Controller 里面直接实例化 JPush 对象,然后按照官方的 demo 的一部分,进行推送测试

push() ->setPlatform('all') ->addAllAudience() ->setNotificationAlert('hello tp3.2') ->send(); print_r($response); }}

在浏览器中运行一下(命令行下也是同样的效果),

test

其结果自然不言而喻,相信有不少开发者都遇到过这个错误

我也很绝望啊

那么问题来了,这个时候到底遇到了什么问题呢?

由于是通过 Composer 安装的插件,其安装目录并不是在 ThinkPHP 的系统级 vendor 目录下面(tp-demo/ThinkPHP/Library/Vendor)而是在应用根目录下面的 vendor 目录。同时 ThinkPHP 约定所有第三方框架的类库文件统一放到系统的 Vendor 目录下面。所以不论是使用 import 还是 vendor 都无法或者说都很难去解决根目录下类库的自动/手动加载问题。

其实使用了 Composer 之后这就不再是 ThinkPHP 的问题了,这就需要从 Composer 的文档中寻求答案了:

对于库的自动加载信息,Composer 生成了一个 vendor/autoload.php 文件。你可以简单的引入这个文件,你会得到一个免费的自动加载支持。 require 'vendor/autoload.php'; 这使得你可以很容易的使用第三方代码

所以,其正确的做法是

push() ->setPlatform('all') ->addAllAudience() ->setNotificationAlert('hello tp3.2') ->send(); print_r($response); }}

只需要再添加一行(注意上面代码的第 2 行 require 'vendor/autoload.php';),然后在命令行运行一下:

result

如果结果出现类似于 Errorcode 1011:cannot find user by this audience 的问题,那么恭喜你,你的集成是成功的,但是有一个小小的问题,相关解决方法请参见

六. 全局自动加载

可以看到在这个类中使用了 JPush 的部分功能,所以是需要在类的上面 require 'vendor/autoload.php';,那么同样的如果需要使用七牛提供的服务呢?

如果是同样使用 Composer 安装的七牛的 SDk ,那么什么都不用管(因为 vendor/autoload.php 这个文件里面已经在安装七牛的时候加载了七牛的类库),直接跟着 use 语句:

use Qiniu\Storage\UploadManager;use Qiniu\Auth;

如果是在另一个 Controller 类中使用极光推送服务呢? require 'vendor/autoload.php'; 这个在相应的 Controller 中是必须的。

但是可以在应用入口文件处添加 require 'vendor/autoload.php';这样就可以全局自动加载 Composer 安装的第三方类库,然后就可以删除所有其他地方的 require 'vendor/autoload.php';

也就是说

// 文件:tp-demo/index.php...// 定义应用目录define('APP_PATH', './Application/');require 'vendor/autoload.php';    // 注意位置一定要在 引入ThinkPHP入口文件 之前// 引入ThinkPHP入口文件require './ThinkPHP/ThinkPHP.php';// 亲^_^ 后面不需要任何代码了 就是如此简单
// 文件:tp-demo/Application/Home/Controller/IndexController.class.php

这样子做也是可行的,并且在需要使用到相关的类库的时候可以直接使用,这就是 Composer 自动加载带来的好处。

<a id='no-composer'>不使用 Composer</a>

一. 获取 ThinkPHP

官网下载(完整版): .

从下图可以看到不同的安装方式其目录结构是完全一样的,不过要我选我肯定选择使用 composer 安装的方式。

目录结构

二. 初次运行 ThinkPHP

$ cd thinkphp_3.2.3_full && php -S 127.0.0.1:4000 其余同上

三. 获取 JPush PHP Api Client 官方插件

项目地址:

获取安装文件包有两种方式:

  • 使用 git 下载最新发布的 tag 的源代码 $ git clone -b 'v3.5.11' --single-branch --depth 1 https://github.com/jpush/jpush-api-php-client.git ThinkPHP/Library/Vendor/jpush
  • 在 浏览器下载压缩包,解压之后放到 ThinkPHP/Library/Vendor/ 目录下。

注意:

这里需要注意的是使用 Composer 安装的时候第三方包是默认放在项目根目录下面的 vendor 目录下,而手动下载的时候却可以放在 ThinkPHP/Library/Vendor 目录下。

四. 配置 JPush

五. 测试 JPush

如果要加载第三方类库,包括不符合命名规范和后缀的类库,以及没有使用命名空间或者命名空间和路径不一致的类库,或者你就是想手动加载类库文件,我们都可以通过手动导入的方式加载。

push() ->setPlatform('all') ->addAllAudience() ->setNotificationAlert('hello tp3.2') ->send(); print_r($response); }}

六. 全局自动加载

不使用 Composer 的话,由于第三方类库不一定符合 ThinkPHP 的命名和后缀规范,所以无法做到第三方类库的全局自动加载,所以使用比较多的第三方类库 Composer 的优越性就体现出来了。


由于本人水平有限,此文难免出现一些错误或者不准确或者表达不好的地方,如有任何不对,恳请批评指正。

作者:Helperhaps - 极光

原文:

知乎专栏:

转载于:https://my.oschina.net/jpushtech/blog/858978

你可能感兴趣的文章
01_VIM基础命令
查看>>
Sublime Text的使用-Mac
查看>>
TCP/IP协议族
查看>>
CentOS6 修改主机名的规范步骤
查看>>
Tomcat在windows中解压war包失败问题
查看>>
最大子数组和分治与暴力求解法
查看>>
安装rabbitMQ
查看>>
数据库琐表
查看>>
JS 中如何判断 undefined 和 null
查看>>
windows 平台使用 VS2017 编译 libevent 源码
查看>>
find用法总结
查看>>
MYSQL千万级数据量的优化方法积累
查看>>
关于 GetMem 和 GetMemory 的区别 - 回复"下雨天2"
查看>>
WinAPI: RemoveDirectory - 删除空目录
查看>>
MySql 基本知识
查看>>
Java线程池(一)
查看>>
Delphi 的绘图功能[5] - 获取 Canvas 对象
查看>>
如何成功清理重建CloudStack环境
查看>>
Windows Server 2008 R2 FTP 及 fireware 防火墙设置
查看>>
WinAPI: 钩子回调函数之 DebugProc
查看>>