ThinkPHP 3.2.x 集成極光推送指北

3.2版本已經過了維護生命周期,官方已經不再維護,請及時更新至5.0版本
—— ThinkPHP 官方倉庫

以上,如果有條件,請關閉這個頁面,然后升級至 ThinkPHP 5,如果由于各種各樣的原因無法升級至 TP 5 ,請往下看。另外本指南使用環境為 Linux/Mac,若開發環境為 Windwos,則或許可能會有某些問題,如果有任何問題,歡迎在下方評論區留言討論。

參考文檔: http://www.kancloud.cn/manual/thinkphp

由于 ThinkPHP 3.2 已經支持了 Composer,因此本指南分為使用 Composer不使用 Composer 兩部分。

快速去看不使用 Composer 的教程

使用 Composer

ThinkPHP 3.2 已經全面支持了 Composer ,所以使用 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 官方插件

項目地址: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);}
}

在瀏覽器中運行一下(命令行下也是同樣的效果),

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';
這使得你可以很容易的使用第三方代碼

所以,其正確的做法是

<?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';),然后在命令行運行一下:

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
<?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 集成極光推送指北
知乎專欄:極光日報

轉載于:https://www.cnblogs.com/jpush88/p/6552766.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371334.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371334.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371334.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java:選擇正確的集合

這是在應用程序中選擇Set &#xff0c; List或Map的正確實現的快速指南。 最好的通用或“主要”實現可能是ArrayList&#xff0c;LinkedHashMap和LinkedHashSet。 它們的整體性能更好&#xff0c;除非您需要其他實現提供的特殊功能&#xff0c;否則應使用它們。 該特殊功能通常…

Java多線程——不變性與安全發布

1、不變性 某個對象在被創建后其狀態就不能被修改&#xff0c;那么這個對象就稱為不可變對象&#xff0c;不可變對象一定是線程安全的。不可變對象很簡單。他們只有一種狀態&#xff0c;并且該狀態由構造函數來控制。 當滿足以下條件時&#xff0c;對象才是不可變的&#xff1a…

中tr不能顯示字符_垃圾文本識別中基本操作指南和錯誤總結,第三部分

創建模型需要用到機器學習的庫&#xff0c;所以我們先下載sklearn庫sklearn庫下載完成后再輸入庫文件&#xff0c;就可以完美運行。然后就是劃分測試集和訓練集&#xff0c;需要注意的是&#xff0c;在從數據處理函數中導入數據時&#xff0c;足足運行了有將近30多秒&#xff0…

mvc后臺post發送json數據

代碼比較簡單&#xff0c;不廢話&#xff0c;直接上代碼&#xff1a; /// <summary>/// 提交json數據&#xff0c;并接收/// </summary>/// <param name"apipath">要請求的服務器地址</param>/// <param name"jsonStr">要提…

(轉載)20分鐘讀懂程序集

轉自&#xff1a;http://www.cnblogs.com/damonlan/p/3221347.html 說到程序集&#xff0c;我剛開始對這個名詞特別的郁悶&#xff01;~。然后 前些天花了些時間 好好讀了一下&#xff0c;現在比較清晰了&#xff0c;把一些書上看到的 記下來&#xff0c;以饗讀者。希望沒浪費你…

大數據胸_喂母乳會導致胸下垂?!你被這個謠言騙了多少年?

很多人認為&#xff0c;給寶寶喂奶會導致胸下垂。有些愛美的媽媽&#xff0c;甚至在寶寶出生6個月后就著急斷奶。那么&#xff0c;喂奶真的會導致胸下垂么&#xff1f;給大家講兩個真實的調查結果哈~2004年的一次針對496名新媽媽的調查結果顯示&#xff0c;有75%的母乳喂養母親…

Spring Shell項目發布

Spring Source昨天發布了Spring Shell 。 Spring Shell是一個交互式Shell&#xff0c;可以使用基于Spring的編程模型輕松地通過命令進行擴展。 它是通過除去OSGi依賴項從Spring Roo項目中提取的&#xff0c;并變成了一個獨立項目。 這使得那些只希望使用交互式外殼功能的人更容…

自制ACL+DHCP實驗(初版)

&#xff08;實驗用gns模擬器&#xff09; ACL 實驗拓撲&#xff1a; 實驗要求&#xff1a; 1.1.1.1→3.3.3.3 不通 11.11.11.11→3.3.3.3 通 2.2.2.2→3.3.3.3 通 實驗步驟&#xff1a; 步驟一&#xff1a;基本配置 R1&#xff1a; R1#conf t R1(config)#int lo0 R1(config-if…

pil 圖像最大值_第97天:圖像庫 PIL(二)

上節我們講了 Python 的圖像處理庫 PIL 的基本圖像處理功能&#xff0c;打開了 PIL 的神秘面紗。這節我們接著講 PIL 的 Image 模塊的常用方法。Image 模塊的方法convertImage.convert(modeNone, matrixNone, ditherNone, palette0, colors256)參數說明&#xff1a;mode&#x…

c#的委托用法delegate

轉載于:https://www.cnblogs.com/douzujun/p/6555886.html

yii2.0

yii是一個高性能的適用于開發web2.0應用的框架&#xff0c;它自帶豐富的功能&#xff0c;包括mvc&#xff0c;dao/aciverecord&#xff0c;緩存&#xff0c;身份驗證和基于角色的訪問控制&#xff0c;腳手架&#xff0c;測試等&#xff0c;可顯著縮短開發時間yii只加載你需要的…

Java中常見的代碼沖突

在工作中&#xff0c;最近我對現有Java項目進行了代碼清理。 完成該練習后&#xff0c;我可以看到在代碼中一次又一次地發生了一組常見的代碼沖突。 因此&#xff0c;我想出了此類常見違規的清單&#xff0c;并與同行分享&#xff0c;以使人們有意識地提高代碼質量和可維護性。…

np讀取csv文件_被 Pandas read_csv 坑了

-- 不怕前路坎坷&#xff0c;只怕從一開始就走錯了方向Pandas 是python的一個數據分析包&#xff0c;納入了大量庫和一些標準的數據模型&#xff0c;提供了高效地操作大型數據集所需的工具。Pandas 就是為解決數據分析任務生的&#xff0c;無論是數據分析還是機器學習項目數據預…

Python 第三方庫 cp27、cp35 等文件名的含義

What does version name ‘cp27’ or ‘cp35’ mean in Python? 如對于 gensim-0.12.4-cp27-none-win_amd64.whl文件名而言&#xff0c;將其文件名拆分的話&#xff0c;含義分別是&#xff1a; 0.12.4 - package version, they may be using semantic versioningcp27 - this p…

JAVA: 序列化

對象序列化 - 一個對象可以被表示為一個字節序列&#xff0c;保存對象的類型信息、對象的數據&#xff0c;還有對象中的數據類型&#xff0c;以便存儲或傳輸。 反序列化 - 將序列化對象寫入文件之后&#xff0c;可以從文件中讀取出來&#xff0c;并且對它進行反序列化&#xff…

尋找隨機的錯誤-一個真實的故事

幾周前&#xff0c;我完成了RapidFTR開源項目的錯誤查找 &#xff0c;這花了我三個晚上。 我認為可能值得分享狩獵的故事。 本文將介紹我的工作。 我將概述我的旅程&#xff0c;以實際找到正在發生的事情的根本原因。 我在本文中的目標是突出顯示可以使用的技術示例&#xff0c…

鈴木uy125摩托車機油_UY125 新瑞夢UM125發布 濟南鈴木于湖南株洲吹響國IV集結號...

?4月18日&#xff0c;濟南鈴木在湖南株洲天臺開元酒店舉行了2019年新品發布會&#xff0c;并于現場發布了兩款極具終端戰略意義的新款國IV車型&#xff0c;分別為定位“實用運動”的全新個性化踏板車型UY125&#xff0c;以及能夠進一步鞏固濟南鈴木在國IV入門級踏板車型領域絕…

473. 核電站問題

★ 輸入文件&#xff1a;nucle.in 輸出文件&#xff1a;nucle.out 簡單對比 時間限制&#xff1a;1 s 內存限制&#xff1a;128 MB 【問題描述】 一個核電站有 N 個放核物質的坑&#xff0c;坑排列在一條直線上。如果連續 M 個坑中放入核物質&#xff0c;則會發生爆炸&…

js判斷時間是早上還是下午_牛奶早上喝好,還是晚上喝好?沒想到“最佳時間”是這個點,顛覆了!...

都說喝牛奶好&#xff0c;要多喝。可什么時間喝牛奶最好呢&#xff1f;是飯前、飯后還是睡前&#xff1f;又或者喝酒前&#xff1f;確實得好好說說。傳言&#xff1a;空腹時身體比較缺能量&#xff0c;牛奶里的蛋白會去提供能量&#xff0c;不會去構成和修復組織(比如修復皮膚)…

Java模因拒絕死亡

也有標題&#xff1b; 我的寵物討厭Java編碼。 有許多Java模因讓我很煩&#xff0c;部分是因為它們總是一個壞主意&#xff0c;但主要是因為人們在找到更好的替代方案后的幾年里仍在繼續使用它們。 使用StringBuffer代替StringBuilder 從2004年開始&#xff0c;用于StringBuf…