ThinkPHP 3.2.x 集成极光推送指北
3.2版本已经过了维护生命周期,官方已经不再维护,请及时更新至5.0版本
—— ThinkPHP 官方仓库
以上,如果有条件,请关闭这个页面,然后升级至 ThinkPHP 5,如果由于各种各样的原因无法升级至 TP 5 ,请往下看。另外本指南使用环境为 Linux/Mac,若开发环境为 Windwos,则或许可能会有某些问题,如果有任何问题,欢迎在下方评论区留言讨论。
由于 ThinkPHP 3.2 已经支持了 Composer,因此本指南分为使用 Composer
和不使用 Composer
两部分。
使用 Composer
ThinkPHP 3.2 已经全面支持了 Composer ,所以使用 Composer 来集成极光推送则成为首选的方式。如果不熟悉 Composer,可以去 Composer 中文网 了解详情,本篇将不会涉及到 Composer 的安装与使用(默认已经全局安装了最新版本的 Composer )。
一. 获取 ThinkPHP
在工作目录下运行 $ composer create-project topthink/thinkphp tp-demo
二. 初次运行 ThinkPHP
$ 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(或其它应用入口文件) 模块/控制器/操作/[参数名/参数值...]
在命令行下运行一下,其输出是:
再回头看一下 Application 目录,可以看到自动生成了公共模块 Common、默认的 Home 模块和 Runtime 运行时目录(非模块):
三. 获取 JPush PHP Api Client 官方插件
项目地址:https://github.com/jpush/jpush-api-php-client
0 . 编辑项目根目录下的 composer.json 配置文件,添加 JPush 插件依赖:
"require": {
"php": ">=5.3.0",
"jpush/jpush": "v3.5.*"
},
1 . 运行 $ composer install
or $ composer update
安装或更新插件 。
2 . 没有第 2 步。
四. 配置 JPush
两个相关问题:
不知道 app_key 和 master_secret 有什么用
不清楚 app_key 和 master_secret 怎么获得
编辑 Application/Common/Conf/config.php
文件
<?php
return array(
'JPUSH_APP_KEY' => 'your app_key',
'JPUSH_MASTER_SECRET' => 'your master_secret'
);
OR
<?php
return array(
'JPUSH' => array(
'APP_KEY' => 'your app_key',
'MASTER_SECRET' => 'your master_secret'
)
);
一维数组和二维数组的配置都可以,只是加载的时候使用不同的参数而已 C('JPUSH_APP_KEY')
or C('JPUSH.APP_KEY)
,个人比较喜欢二维数组,所以下面都以二维数组来示例。
五. 测试 JPush
首先习惯性的在 Controller 里面直接实例化 JPush 对象,然后按照官方的 demo 的一部分,进行推送测试
<?php
namespace Home\Controller;
use Think\Controller;
use JPush\Client as JPushClient;
class IndexController extends Controller {
public function index() {
$jpush = new JPushClient(C('JPUSH.APP_KEY'), C('JPUSH.MASTER_SECRET'));
$response = $jpush->push()
->setPlatform('all')
->addAllAudience()
->setNotificationAlert('hello tp3.2')
->send();
print_r($response);
}
}
在浏览器中运行一下(命令行下也是同样的效果),
其结果自然不言而喻,相信有不少开发者都遇到过这个错误
那么问题来了,这个时候到底遇到了什么问题呢?
由于是通过 Composer 安装的插件,其安装目录并不是在 ThinkPHP 的系统级 vendor 目录下面(tp-demo/ThinkPHP/Library/Vendor
)而是在应用根目录下面的 vendor
目录。同时 ThinkPHP 约定所有第三方框架的类库文件统一放到系统的 Vendor 目录下面。所以不论是使用 import
还是 vendor
都无法或者说都很难去解决根目录下类库的自动/手动加载问题。
其实使用了 Composer 之后这就不再是 ThinkPHP 的问题了,这就需要从 Composer 的文档中寻求答案了:
对于库的自动加载信息,Composer 生成了一个
vendor/autoload.php
文件。你可以简单的引入这个文件,你会得到一个免费的自动加载支持。
require 'vendor/autoload.php';
这使得你可以很容易的使用第三方代码
所以,其正确的做法是
<?php
namespace Home\Controller;
require 'vendor/autoload.php';
use Think\Controller;
use JPush\Client as JPushClient;
class IndexController extends Controller {
public function index() {
$jpush = new JPushClient(C('JPUSH.APP_KEY'), C('JPUSH.MASTER_SECRET'));
$response = $jpush->push()
->setPlatform('all')
->addAllAudience()
->setNotificationAlert('hello tp3.2')
->send();
print_r($response);
}
}
只需要再添加一行(注意上面代码的第 2 行 require 'vendor/autoload.php';
),然后在命令行运行一下:
如果结果出现类似于 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
<?php
namespace Home\Controller;
// require 'vendor/autoload.php'; 此行删除
use Think\Controller;
use JPush\Client as JPushClient;
...
这样子做也是可行的,并且在需要使用到相关的类库的时候可以直接使用,这就是 Composer 自动加载带来的好处。
不使用 Composer
一. 获取 ThinkPHP
官网下载(完整版): http://www.thinkphp.cn/down/framework.
从下图可以看到不同的安装方式其目录结构是完全一样的,不过要我选我肯定选择使用 composer 安装的方式。什么!你说你不知道什么是 Composer
二. 初次运行 ThinkPHP
$ cd thinkphp_3.2.3_full && php -S 127.0.0.1:4000
其余同上
三. 获取 JPush PHP Api Client 官方插件
项目地址:https://github.com/jpush/jpush-api-php-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
; - 在 项目 Release 页面 浏览器下载压缩包,解压之后放到 ThinkPHP/Library/Vendor/ 目录下。
注意:
这里需要注意的是使用 Composer 安装的时候第三方包是默认放在项目根目录下面的 vendor 目录下,而手动下载的时候却可以放在 ThinkPHP/Library/Vendor 目录下。
四. 配置 JPush
五. 测试 JPush
如果要加载第三方类库,包括不符合命名规范和后缀的类库,以及没有使用命名空间或者命名空间和路径不一致的类库,或者你就是想手动加载类库文件,我们都可以通过手动导入的方式加载。
<?php
namespace Home\Controller;
Vendor('jpush.autoload');
use JPush\Client as JPushClient;
use Think\Controller;
class IndexController extends Controller {
public function index() {
$jpush = new JPushClient(C('JPUSH.APP_KEY'), C('JPUSH.MASTER_SECRET'));
$response = $jpush->push()
->setPlatform('all')
->addAllAudience()
->setNotificationAlert('hello tp3.2')
->send();
print_r($response);
}
}
六. 全局自动加载
不使用 Composer 的话,由于第三方类库不一定符合 ThinkPHP 的命名和后缀规范,所以无法做到第三方类库的全局自动加载,所以使用比较多的第三方类库 Composer 的优越性就体现出来了。
由于本人水平有限,此文难免出现一些错误或者不准确或者表达不好的地方,如有任何不对,恳请批评指正。
作者:Helperhaps - 极光
原文:ThinkPHP 3.2.x 集成极光推送指北
知乎专栏:极光日报
ThinkPHP 3.2.x 集成极光推送指北的更多相关文章
- Laravel 集成 JPush 极光推送指北
我是一个 Laravel 小白,我是一个 Laravel 小白,我是一个 Laravel 小白(默念三遍再往下读,如果非小白就不用看了). Laravel 使用 Composer 来管理代码依赖.所以 ...
- thinkphp3.2集成极光推送
项目中用到了给客户端的推送功能,选用了极光推送,下面演示一下在thinkphp中集成极光推送 1.下载极光推送的php类,可以从笔者的git下载 地址:https://git.oschina.net/ ...
- 1、Android Studio集成极光推送(Jpush) 报错 java.lang.UnsatisfiedLinkError: cn.jpush.android.service.PushProtoco
Android studio 集成极光推送(Jpush) (华为手机)报错, E/JPush: [JPushGlobal] Get sdk version fail![获取sdk版本失败!] W/Sy ...
- Swift3集成极光推送
现在很多程序都开始使用Swift开发了,但是第三方库大多数都是用OC写的,所以我们要使用Swift和OC混编.今天的内容主要讲Swift3.0集成极光推送. 1.准备工作 集成指南,极光上说的 ...
- C#—ASP.NET:集成极光推送(Push API v3)
C#—ASP.NET:集成极光推送(Push API v3) 原文地址: https://blog.csdn.net/CXLLLK/article/details/86489994 1.极光推送官 ...
- 李洪强iOS之集成极光推送三iOS集成指南
李洪强iOS之集成极光推送三iOS集成指南 SDK说明 适用版本 本文匹配的 SDK版本:r2.1.5 以后.查看最近更新了解最新的SDK更新情况.使用Xcode 6及以上版本可以使用新版Push S ...
- 李洪强iOS之集成极光推送二iOS 证书 设置指南
李洪强iOS之集成极光推送二iOS 证书 设置指南 创建应用程序ID 登陆 iOS Dev Center 选择进入iOS Provisioning Portal. 在 iOS Provisioning ...
- 李洪强iOS之集成极光推送一iOS SDK概述
李洪强iOS之集成极光推送一iOS SDK概述 JPush iOS 从上图可以看出,JPush iOS Push 包括 2 个部分,APNs 推送(代理),与 JPush 应用内消息. 红色部分是 A ...
- ionic2集成极光推送
ionic2集成极光推送: ionic2api:https://ionicframework.com/docs/ 极光推送官网:https://www.jiguang.cn android-怎么注册极 ...
随机推荐
- js动态的给json对象添加新的元素
把{name:"xxx",age:"xxx"}变成{name:"xxx",age:"xxx",value:"x ...
- css水平居中,竖直居中技巧(二)
css水平居中,竖直居中技巧(二)===### 1.效果 ### 2.代码#### 2.1.index.html <!DOCTYPE html> <html lang="z ...
- H5 继承
继承 CSS的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代.比如下面代码:如某种颜色应用于p标签,这个颜色设置不仅应用p标签 ...
- TCP与UDP与HTTP协议
http:是用于www浏览的一个协议.tcp:是机器之间建立连接用的到的一个协议. 1.TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层.在网络层有IP协议.ICMP协议.ARP协议.R ...
- UIView的setNeedsLayout, layoutIfNeeded 和 layoutSubviews 方法之间的关系解释(转)
layoutSubviews总结 ios layout机制相关方法 - (CGSize)sizeThatFits:(CGSize)size- (void)sizeToFit—————— - (void ...
- SQLSERVER中常用的系统视图
QLServer中提供了相当丰富的系统视图,能够从宏观到微观,从静态到动态反应数据库对象的存储结果.系统性能.系统等待事件等等.同时 也保留了与早期版本兼容性的视图,主要差别在于SQLServer20 ...
- AspnetBoilerplate (ABP) Organization Units 组织结构管理
ABP是一个成熟的.NET框架,功能完善.目前由于项目需要正在自学中. ABP对于组织节点管理这一基本上每个项目都要反复重复开发的内容,进行了自己的实现. 主要包括这些常用功能: 多租户 树结构管理的 ...
- C# 基础连接已经关闭: 发送时发生错误
在程序中获取某个https网址的源码,GetRespose()时 出现了“基础连接已经关闭: 发送时发生错误.”的错误提示. 翻了论坛后,有个仁兄说: //.net 4 ...
- 树状数组 - 2352 Stars
题目地址: http://poj.org/problem?id=2352 分析: - 题意分析: 有n个星星, 它的左下方(x和y不超过它)的星星的数目就是它的level, 分别计算level 为 ...
- [干货来袭]C#7.0新特性(VS2017可用)(转)
出处:http://www.cnblogs.com/GuZhenYin/p/6526041.html 微软昨天发布了新的VS 2017 ..随之而来的还有很多很多东西... .NET新版本 ASP.N ...