2016-07-07 17 views
0

Androidのapplication.itでServer APIコールを使用してFirebaseプッシュ通知を開発すると、アプリケーションがフォアグラウンドになってもアプリケーションがフォアグラウンドになっていないときに完全に機能しますお知らせ。アプリがバックグラウンドのときにAndroid-Firebaseプッシュ通知

ヘッダーにServer APIキーとコンテンツタイプが含まれているJSONデータを送信しています。この値にbodyを配列として持つデータが含まれています。助けをお待ちしています。

PHPコード:

$url = 'https://fcm.googleapis.com/fcm/send'; 
$fields =array('registration_ids' => $tokens,'data' => $message); 
$headers = array('Authorization:key = value','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);?> 
+0

要求のコード(カール要求の場合またはそうでない場合)、サンプルペイロード、リスナーサービスを指定します。 –

+2

ほとんどの場合、アプリがバックグラウンドにあるときにOSによって処理される通知メッセージを送信している可能性があります。 [この回答](http://stackoverflow.com/a/37711151/209103)を参照してください。それがあなたの質問ではない場合は、[問題を再現する最小限のコード]を共有する必要があります(http://stackoverflow.com/help/mcve)。 –

+0

@Shreyaコードをコメントとして投稿するのではなく、投稿を編集してください。 –

答えて

0

私もこれが最初に起こっていたと感じたが、その後、私のAndroidアプリケーションが実際に目覚めたことを発見しました。残念ながら、私の望むことを実行するのに十分な目覚めをしていませんでした(私のサーバーにハートビートのRESTメッセージを送る)。だから私は質問であなたの質問に答えます - なぜあなたはプッシュ通知を得ていないと決めましたか?私にとっては、ときに私は.... onMessageReceived内からのメッセージをログに記録

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
    Log.d(TAG, "From: " + remoteMessage.getFrom()); 
    Log.d(TAG, "Notification Message Body: " + remoteMessage.getData()); 
} 

は、それは、Appアプリがフォアグラウンドまたはバックグラウンドにあったかどうかに関係なく、火災クラウドメッセージングサービスがメッセージを送ったびに目が覚めてしまった証明しました。私は、AndroidアプリのonMessageReceived()メソッドは、常にでもバックグラウンドモードで呼び出されたことを確認するために私のサーバー側にいくつかの変更をしなければならなかった

他の過ちは、私はあなたと共有するものと最初に作られました。私のメッセージはJSONとHTTPとUpstreamでした。私のサーバーはC#で書かれています。

  1. ペイロードのダウンストリームメッセージには2種類のペイロードがあります。 (a)通知および(b)データ。このタイプは、アプリケーションがバックグラウンドかフォアグラウンドのどちらであるかによってメッセージを受け取るときのAppの動作を示します。それゆえ、私は、(b)自分の要求を満たすデータ型ペイロードが必要でした。

  2. メッセージを通常よりも優先度高くする必要がありました。私は正常と高い両方のテストの負荷をしました。 Android AppがDozeモードに入ったら、正常は機能しませんでした。私はこの参考文献が有用であることを発見したhttps://developer.android.com/training/monitoring-device-state/doze-standby.html#support_for_other_use_cases

+0

ありがとうございますが、これは私にとってはうまくいきません。私はすべてのことを試しました – Shreya

0

私のコードを見てください。多分それはあなたを助ける:

$token = getTokenDevice($dn); 

    $path_to_firebase_cm = 'https://fcm.googleapis.com/fcm/send'; 

    $fields = array(
     'to' => $token, 
     'priority' => 'normal', 
     'content_available' => true, 
     'data' => array('type' => $type, 'title' => $title, 'body' => $message) 
); 

    $headers = array(
     'Authorization:key='.$server_key, 
     'Content-Type:application/json' 
); 
    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_URL, $path_to_firebase_cm); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields)); 

    $result = curl_exec($ch); 

    curl_close($ch); 

私はiOSデバイス用のcontent_availableを使用しています。このコードは、アプリがバックグラウンドになっているときに、AndroidとiOSで私に役立ちます。

FirebaseMessagingサービスを確認する必要があります。私の場合、次のようになります。

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
    Auth auth = new Auth(getApplicationContext()); 

    Map<String, String> data = remoteMessage.getData(); 

    if (auth.isNotificationEnabled(data.get("type"))) { 
     Log.e(TAG, "data: " + remoteMessage.getData()); 
     sendNotification(data.get("title"), data.get("body")); 
    } 
} 
関連する問題