过去两周我们在反应原生中遇到了android推送通知,我们也尝试了以下反应原生模块
https://www.npmjs.com/package/react-native-push-notification
使用上面的模块,我们可以获得本地通知(来自应用程序的静态),这是有效的,但是没有显示来自服务器的通知。我们试过" https://github.com/oney/react-native-gcm-android"这也是..
能够注册GCM并从GCM获取令牌,但使用该注册令牌,无法获取通知和
我们使用php从服务器发送通知,php代码在
下面这是我们用来从服务器发送通知的代码,
<?php
function sendPushNotificationToGCM($registatoin_ids, $message) {
$url = 'https://android.googleapis.com/gcm/send';
$fields = array('registration_ids' => $registatoin_ids, 'data' => array("title" => 'hi', "message" => $message, ), );
define("GOOGLE_API_KEY", "YOUR API KEY");
$headers = array(
'Authorization: key=' . GOOGLE_API_KEY,
'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
$result = curl_exec($ch);
if ($result === FALSE) {
die('Curl failed: ' . curl_error($ch));
}
curl_close($ch);
return $result;
}
?>
我们如何克服这个?
答案 0 :(得分:4)
尝试以下php代码
<?php
//Generic php function to send GCM push notification
function sendMessageThroughGCM($registatoin_ids, $message) {
//Google cloud messaging GCM-API url
$url = 'https://android.googleapis.com/gcm/send';
$fields = array(
'registration_ids' => $registatoin_ids,
'data' => $message,
);
// Update your Google Cloud Messaging API Key
define("GOOGLE_API_KEY", "Browswer Key");
$headers = array(
'Authorization: key=' . GOOGLE_API_KEY,
'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
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);
if ($result === FALSE) {
die('Curl failed: ' . curl_error($ch));
}
curl_close($ch);
return $result;
}
?>
<?php
//Post message to GCM when submitted
$pushStatus = "GCM Status Message will appear here";
if(!empty($_GET["push"])) {
$gcmRegID = file_get_contents("GCMRegId.txt");
$pushMessage = $_POST["message"];
if (isset($gcmRegID) && isset($pushMessage)) {
$gcmRegIds = array($gcmRegID);
$message = array("m" => $pushMessage);
$pushStatus = sendMessageThroughGCM($gcmRegIds, $message);
}
}
//Get Reg ID sent from Android App and store it in text file
if(!empty($_GET["shareRegId"])) {
$gcmRegID = $_POST["regId"];
file_put_contents("GCMRegId.txt",$gcmRegID);
echo "Done!";
exit;
}
?>
答案 1 :(得分:2)
有些设备有时会不支持推送通知并延迟接收通知。所以请检查几个设备。所以你可以得到答案。
答案 2 :(得分:1)
用于测试创建浏览器密钥,并且在创建broswer密钥并使用该密钥时不提供任何安全包名称
答案 3 :(得分:0)
您提供的Php代码是服务器端,对吧?
从FCM服务器发送的首次检查推送通知是否在app中工作?
新的云消息传递项目必须在Firebase console中创建Firebase项目。在此过程中,您将为项目生成配置文件和凭据。
1.如果您还没有Firebase项目,请在Firebase console中创建一个Firebase项目。如果您已有与移动应用程序关联的现有Google项目,请单击“导入Google项目”。否则,请单击“创建新项目”。
2.单击添加Firebase到您的Android应用程序,然后按照设置步骤操作。如果您要导入现有的Google项目,这可能会自动发生,您只需download the config file。
3.出现提示时,输入您应用的包名称。输入您的应用正在使用的包名称非常重要;只有在将应用添加到Firebase项目时才能设置此项。
4.最后,您将下载google-services.json文件。您可以随时再次download this file。
5.如果您还没有这样做,请将其复制到项目的模块文件夹中,通常是app /.
按照所有步骤后,点击“增长”选项下最左侧的“通知”选项。
然后,您可以点击发送您的第一条消息并开始发送推送通知。
选择单个设备并输入FCM注册令牌,然后单击发送消息。
如果您仍然没有获得推送通知,那么请检查您是否遵循react-native模块提供的所有步骤。 不要忘记在android / app文件夹中添加google-services.json文件。
它对我有用。
如果您收到通知,则服务器端代码存在一些问题。