2017-04-06 3 views
1

本当に奇妙なことに誰もこれを尋ねたことはありません。Firebase Mismatch認証キーがサーバーキーの場合のID。

認証キー(サーバーキー)として私のサーバーキーでエラーとしてMismatchSenderIdが表示されています。 一方、私のデバイスのトークンが私の認証キーであっても私のデバイス上で通知を受け取らなかった場合、私はpush_notification()から戻り値として成功を収めています。

ファイアベース(単一デバイス)コンソールにトークンを持つ単一のデバイスに送信できるので、自分のトークンが正しいことを確信しています。この他questionに私をリードしたが、その後、私はそのすべてMismatchSenderIdのエラーがで置き換えることで解決されて以来、私はかなり実際に迷ってしまいました通知の一部

に移動する前に、この問題を確認したいと思います

正しいサーバーキー。

<?php 
    require "dbconfig.php"; 

    $sql = "SELECT token FROM tokendb"; 
    $result = mysql_query($sql) or die($sql."<br/><br/>".mysql_error()); 
    $tokens = array(); 

    while($row = mysql_fetch_assoc($result)) 
    { 
     echo $row['token']; //this shows the same token compared to the token show in logcat(visual studio) 
     $tokens[] = $row["token"]; 

     echo '<form id="form1" name="form1" method="post" action="">'. 
    '<p>From<br>'. 
    '<input type="text" size="100" maxlength="100" name="From" id="From" /><br>'. 
    '<p>Title<br>'. 
    '<input type="text" size="100" maxlength="100" name="Title" id="Title" />'. 
    '<br>'. 
    '<input type="submit" name="Send" id="Send" value="Send" />'. 
    '</form>'; 

    } 

    $message = array("message" => "notification test"); 
    $message_status = sendFCMMessage($message, $tokens); 
    echo $message_status; 

    function sendFCMMessage($message,$target){ 

     //FCM API end-point 
     $url = 'https://fcm.googleapis.com/fcm/send'; 

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

     //header with content_type api key 
     $headers = array(
     'Content-Type:application/json', 
      'Authorization:key=********' 
     ); 
     //CURL request to route notification to FCM connection server (provided by Google)   
     $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('Oops! FCM Send Error: ' . curl_error($ch)); 
     } 
     curl_close($ch); 
     return $result; 
    } 

    ?> 

EDIT:この短いPHPコードも私に与えているMismatchSenderIdエラー

<?php 
$ch = curl_init("https://fcm.googleapis.com/fcm/send"); 
$header=array('Content-Type: application/json', 
"Authorization: key=***(serverkey from project)"); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false); 

curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, "{ \"notification\": { \"title\": \"Test desde curl\", \"text\": \"Otra prueba\" }, \"to\" : \"my device's token\"}"); 

curl_exec($ch); 
curl_close($ch); 
?> 

UPDATE

アプリをアンインストールしてから再インストールするには、問題を解決しました。

+0

wow chiggaは天才です –

答えて

1

MismatchSenderId異なる送信者(プロジェクト)に関連付けられている登録トークンに送信しようとすると、エラーが発生します。ドキュメントから:

登録トークンは特定の送信者グループに関連付けられています。クライアントアプリケーションがFCMに登録するときは、どの送信者がメッセージを送信できるかを指定する必要があります。クライアントアプリケーションにメッセージを送信するときは、これらの送信者IDのいずれかを使用する必要があります。別の送信者に切り替えると、既存の登録トークンは機能しません。

は、使用している サーバキーが登録トークンがに関連付けられているのと同じ送信者からプロジェクトであることを確認してください。これは、google-services.jsonファイルを確認して、 の送信者IDがメッセージを送信するために使用しているFirebaseプロジェクトに表示されている の送信者IDと一致するかどうかを確認することで行います。

メッセージを受信しないという点では、コードが送信しているペイロードの構造は何か不明です。 notificationおよび/またはdataメッセージペイロードを使用して、正しく構造化されたメッセージペイロードであるかどうかを確認してください。

+0

こんにちは、はい、私はサーバーキーが私が働いている同じプロジェクトからのものであることを確認しました。私のプロジェクトの下でFirebaseによって提供されるgoogle-services.jsonにも、同じ送信者ID – Lozy

+0

Oddが含まれています。アプリをアンインストールして再インストールして新しい登録トークンを取得してから、メッセージを再度送信しようとしましたか? –

+0

私はアプリをアンインストールして昨日アプリを再インストールしようとしましたが、何とか今日解決されました。ありがとう – Lozy

0

正しい場所からサーバーキーを取得してください firebaseからNotificationのサーバーキーを取得するのはちょっと難しいです。ここで

は手順は次のとおりです。

GO TO CONSOLE - >プロジェクト - >プロジェクト設定 - > CLOUDメッセージング(2番目のタブ)

や仕事であろう、彼らからあなたのサーバキーとSender IDを取りますあなたのために。

アプリケーションをアンインストールして再インストールしてみてください。

+0

まだ問題がある場合はお知らせください。 – 9spl