针对Android的反应原生推送通知

时间:2016-03-11 06:05:23

标签: android push-notification react-native

过去两周我们在反应原生中遇到了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;
  }
 ?>

我们如何克服这个?

4 个答案:

答案 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 /.

按照所有步骤后,点击“增长”选项下最左侧的“通知”选项。

enter image description here

然后,您可以点击发送您的第一条消息并开始发送推送通知。

选择单个设备并输入FCM注册令牌,然后单击发送消息。

如果您仍然没有获得推送通知,那么请检查您是否遵循react-native模块提供的所有步骤。 不要忘记在android / app文件夹中添加google-services.json文件。

它对我有用。

如果您收到通知,则服务器端代码存在一些问题。