2016-08-04 258 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重定向域。但仍然無法正常工作。 –