如何用ajax请求在php中实现FCM



我试图在事件点击时从我的网站向我的设备(在这种情况下是我的PC(发送通知。我用ajax处理事件点击,并将其发送到我的控制器。顺便说一句,我用的是代码点火器4。

FCM成功了,但没有通知我的电脑。我试图遵循这个解决方案,但仍然没有通知。

这是我的fcm在var_dumpcurl_exec($ch)时的响应

string(144) "{"multicast_id":3939414893160702393,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"6b651aff-c990-4c90-8bf8-c24c69571f28"}]}"

那么这里的问题是什么呢?

我的脚本:

const messaging = firebase.messaging();
messaging
.requestPermission()
.then(function () {
// get the token in the form of promise
return messaging.getToken()
})
.then(function(token) {
console.log(token)
// device_token.value = token;
// server_key.value = config.serverKey;
$('#login_btn').click(function(){
var email = $('input[name=email]').val();
var pass = $('input[name=pass]').val();
var device_token = token;
var server_key = config.serverKey;
if(email == '' || pass == ''){
alert('Email dan Password tidak boleh kosong');
}else{
$.ajax({
url : '<?php echo base_url('Login/aksiLogin'); ?>',
type : 'POST',
data : {
email : email,
pass : pass,
device_token : device_token,
server_key : server_key
},
success : function(res){
alert("berhasil");
}
})
}
})
})
.catch(function (err) {
console.log("Unable to get permission to notify.", err);
});

我的控制器:

function aksiLogin(){
send_notif($this->input->post('device_token'), $this->input->post('server_key') , 'Title message', 'Body Message');
die();
}

我的助手:

if (!function_exists('send_notif')) {
function send_notif($token, $serverKey, $title, $body){
$url = 'https://fcm.googleapis.com/fcm/send';
$fields = [
"to" => $token,
"notification" => [
"body" => "SOMETHING",
"title" => "SOMETHING",
// "icon" => "ic_launcher"
]
];
// var_dump($fields);
// die();
// Firebase API Key
$headers = array('Authorization:key='.$serverKey.'','Content-Type:application/json');
// Open connection
$ch = curl_init();
// Set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Disabling SSL Certificate support temporarly
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
$result = curl_exec($ch);
var_dump($result);
die();

if ($result === FALSE) {
die('Curl failed: ' . curl_error($ch));
}
curl_close($ch);
}

}

是因为我的设备吗?如果是这样的话,那么为什么当我用firebase控制台发送通知时工作得很好呢?

编辑:我还是想不通,有人能帮我吗?

我想明白了。

表面上我的问题是,我在发送通知时打开了页面浏览器。所以通知不会出现。我尝试将Timeout设置为我的表单,然后关闭浏览器,notif就在那里。

要发送到android/ios设备,必须是在线服务器(主机(才能获得令牌。我在本地尝试过,但没有生成令牌。