总结:
1.给一个人推,能成功,
2.给多个人推,有两种,一种是给组推,一种是给主题推,之前用的是组推,但是不成功,这里换成主题推;
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use paragraph1\phpFCM\Client;
use paragraph1\phpFCM\Message;
use paragraph1\phpFCM\Recipient\Device;
use paragraph1\phpFCM\Notification;
class FcmController extends Controller{
private $apikey;
public function __construct()
{
$this->apikey=\'自己应用的apikey\';
}
//用Fcm推送消息
public function push($content=\'\',$fcmtoken=\'\'){
$apiKey = $this->apikey;
$client = new Client();
$client->setApiKey($apiKey);
$client->injectHttpClient(new \GuzzleHttp\Client());
// $note = new Notification(\'test title\', \'现在时间是 \'.date(\'Y-m-d H:i:s\'));
$note = new Notification(\'\', $content);
$note->setIcon(\'smile\')
->setColor(\'#ffffff\')
->setBadge(1);
$message = new Message();
$message->addRecipient(new Device($fcmtoken));
$message->setNotification($note)
->setData(array(\'someId\' =>11112));
$message->setNotification($note);
$response = $client->send($message);
var_dump($response->getStatusCode());
}
/**
* 这里没用了
* @param array $requestData
* @return bool
*/
public function old_insertIntoGroup($requestData=[]){
if(!$requestData[\'tuid\'] || !$requestData[\'version\'] || !$requestData[\'fcmtoken\'] ){
return false;
}
//创建和添加设备组的 url
$url = \'https://android.googleapis.com/gcm/notification\';
$header = [
\'Content-Type:application/json\',
\'Authorization:key=\'.$this->apikey,
\'project_id:自己项目id\',
];
$groupkey=\'\';
//先查找表中最近新的设备组的key,若key里面的子账号已经达到一定数目,就新建一个组
$gdata=DB::select(\'select count(id) num,groupkey from zeai_andro_push group by groupkey order by id desc limit 1;\');
// $gdata=DB::select(\'select groupkey from zeai_andro_push order by id desc limit 1;\');
//确保能有推送fcmtoken
if( !DB::table(\'zeai_andro_push\')->where([\'tuid\'=>$requestData[\'tuid\']])->count([\'id\'])) {
$requestData[\'groupkey\'] = $gdata[0]->groupkey;
DB::table(\'zeai_andro_push\')->insertGetId($requestData);
}
$groupkey=$gdata[0]->groupkey;
$data = [
"operation"=>"add",
"notification_key_name"=> "appUser-Chris",//设备组名
"notification_key"=>$groupkey,
"registration_ids"=>[$requestData[\'fcmtoken\']]
];
$res = json_decode( $this->http($url,$data,\'post\',$header) ,true);
if (isset($res[\'notification_key\'])){
$res=DB::table(\'zeai_andro_push\')
->where([\'tuid\'=>$requestData[\'tuid\']])
->update([
\'groupkey\'=>$res[\'notification_key\']
]);
return $res ? true : false;
}else{
//一个设备组是否满员未能测试 如果运行到这里 可以根据返回的提示
return false;
}
}
/**
* 添加用户的主题,保存用户的fcmtoken
* @param array $requestData
* @return bool
*/
public function insertIntoGroup($requestData=[]){
if(!$requestData[\'tuid\'] || !$requestData[\'version\'] || !$requestData[\'fcmtoken\'] ){
return false;
}
$this->oldmyTopic($requestData[\'fcmtoken\']);
//先查找表中最近新的设备组的key,若key里面的子账号已经达到一定数目,就新建一个组
//确保能有推送fcmtoken
if( !DB::table(\'zeai_andro_push\')->where([\'tuid\'=>$requestData[\'tuid\']])->count([\'id\'])) {
$requestData[\'groupkey\'] = 0;
DB::table(\'zeai_andro_push\')->insertGetId($requestData);
}
}
//创建设备组
public function createGroup($fcmtoken=\'\'){
//创建和添加设备组的 url
$url = \'https://android.googleapis.com/gcm/notification\';
$header = [
\'Content-Type:application/json\',
\'Authorization:key=\'.$this->apikey,
\'project_id:196236249110\',
];
$data = [
"operation"=>"create",
"notification_key_name"=> (string)time(),//设备组名
"registration_ids"=>[$fcmtoken]
];
$res = json_decode( $this->http($url,$data,\'post\',$header) ,true);
return $res[\'notification_key\'];
}
//向主题发送消息
public function sendMessageToGroup(){
$url = \'https://fcm.googleapis.com/fcm/send\';
$header = [
\'Content-Type:application/json\',
\'Authorization:key=\'.$this->apikey,
\'project_id:196236249110\',
];
$data=[
\'to\'=>\'/topics/自己的主题名\',
"notification"=>[
\'body\'=>"^_^ Come and get the coins.There are a lot of new tasks. ^_^",
\'title\'=>\'\',
\'icon\'=>\'myicon\'
],
];
$res = $this->http($url,$data,\'post\',$header);
var_dump($res);
}
/**
* 获取自己的主题内容
*/
private function myTopic($fcmtoken=\'\')
{
$url=\'https://iid.googleapis.com/iid/info/\'.$fcmtoken.\'?details=true\';
$header = [
// \'Content-Type:application/json\',
\'Authorization:key=\'.$this->apikey,
\'details:true\',
];
$res=$this->http($url,\'\',\'get\',$header);
var_dump($res);
}
/**
* 给自己添加主题 wdwdinstagram
* @param $fcmtoken
*/
private function oldmyTopic($fcmtoken)
{
$url=\'https://iid.googleapis.com/iid/v1/\'.$fcmtoken.\'/rel/topics/自己的主题名\';
$header = [
\'Content-Type:application/json\',
\'Authorization:key=\'.$this->apikey,
\'Content-Length: 0\',
];
$this->http($url,\'\',\'post\',$header);
}
}