2016-08-04 181 views
0

我试图使用Firebase将通知推送到我的Android应用程序。我已经在我的本地系统上尝试过了,它工作正常。这是我的代码。Curl无法发送FCM消息

function sendPushNotiication($tokens,$message){ 
    $url='https://fcm.googleapis.com/fcm/send'; 
    $fields= array(
     'registration_ids'=>$tokens, 
     'data'=>$message 
    ); 
    $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); 
    var_dump($result); 
    if($result==FALSE){ 
     die('curl failed: '. curl_error($ch)); 
    } 

    curl_close($ch); 
    return $result; 
} 

我已经调用sendPushNotification()方法将数据发送到firebase。 问题是当我把这个在线服务器上。它在var_dump的$ result结果中为NULL。并在它死后与

卷曲失败。

curl有什么问题,它应该工作,如果它在本地系统上工作。

我还执行phpinfo()函数,发现

cURL support enabled 
cURL Information libcurl/7.21.0 OpenSSL/0.9.8q zlib/1.2.3 
+0

改为使用'==='。测试'== false'是有风险的,因为空字符串,整数'0'等...都测试为等于false。 '0'是一个完全有效的json响应。 –

+0

@MarcB感谢您的快速回复。是的,我用===替换了==,但是如果脚本在本地工作正常,为什么它在服务器上给null。 –

+0

也许谷歌的黑名单你的主机公司或什么的。不知道。 –

回答

0
function sendPushNotification($registration_ids, $message) { 
      // Set POST variables 
     $url = 'Url'; 

     $fields = array(); 
     $fields['data'] = $message; 
     if(is_array($registration_ids)){ 
     $fields['registration_ids'] = $registration_ids; 
     }else{ 
     $fields['to'] = $registration_ids; 
     } 

     $headers = array(
      'Authorization: key=' . GOOGLE_API_KEY, 
      '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); 

     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
     // Disabling SSL Certificate support temporarly 
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

     curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields)); 

     // Execute post 
     $result = curl_exec($ch); 
     if ($result === FALSE) { 
      die('Curl failed: ' . curl_error($ch)); 
     } 
     // Close connection 
     curl_close($ch); 
     return $result; 
} 

只需验证我们的代码与此有关。

+0

我试过了。它给出了相同的结果,NULL。我也尝试通过禁用SSL证书支持。我们是否需要在Firebase控制台上添加我们的域名?我尝试在Auth中添加域,即OAuth重定向域。但仍然无法正常工作。 –