1

私のアプリでFCMを実装しようとしています。今、Firebaseアプリコンソールから送信するとメッセージを受け取ることができます。しかし、私のサーバーからメッセージを送信しようとすると、メッセージは電話に届かない。しかし、サーバーからメッセージを送信した後、成功ステータスになり、1台のデバイスに配信されたことが示されます。どんな助けもありがとう。サーバから送信されたときにFCMメッセージがデバイスに届かない

ありがとうございました。

マニフェストファイル:

</application> 

<service 
    android:name=".FirebaseMessagingService"> 
    <intent-filter> 
     <action android:name="com.google.firebase.MESSAGING_EVENT"/> 
    </intent-filter> 
</service> 


<service 
    android:name=".FirebaseInstanceIDService"> 
    <intent-filter> 
     <action  android:name="com.google.firebase.INSTANCE_ID_EVENT"/> 
    </intent-filter> 
</service> 

</manifest> 

Build.gradleアプリ:

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:24.0.0' 
    compile 'com.android.support:design:24.0.0' 
    compile 'com.squareup.okhttp3:okhttp:3.2.0' 
    compile 'com.google.firebase:firebase-messaging:9.0.2' 
} 

apply plugin: 'com.google.gms.google-services' 

Build.gradleプロジェクト:

buildscript { 
    repositories { 
     jcenter() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:2.1.2' 
     classpath 'com.google.gms:google-services:3.0.0' 



    } 
} 

allprojects { 
    repositories { 
     jcenter() 
    } 
} 

task clean(type: Delete) { 
    delete rootProject.buildDir 
} 

コード:

public class FirebaseMessagingService extends com.google.firebase.messaging.FirebaseMessagingService { 

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 

    ShowNotification(remoteMessage.getData().get("message")); 
} 

private void ShowNotification(String message) { 

    Intent i = new Intent(this,MainActivity.class); 
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

    PendingIntent pendingintent = PendingIntent.getActivity(this,0,i,PendingIntent.FLAG_UPDATE_CURRENT); 

    android.support.v4.app.NotificationCompat.Builder builder = new NotificationCompat.Builder(this) 
      .setAutoCancel(true) 
      .setContentTitle("FCM Test") 
      .setContentText(message) 
      .setSmallIcon(R.drawable.common_google_signin_btn_icon_dark) 
      .setContentIntent(pendingintent); 

    NotificationManagerCompat manager =(NotificationManagerCompat) getSystemService(NOTIFICATION_SERVICE); 
    manager.notify(0,builder.build()); 

} 



} 





public class FirebaseInstanceIDService extends FirebaseInstanceIdService { 

@Override 
public void onTokenRefresh() { 


    String token = FirebaseInstanceId.getInstance().getToken(); 
    System.out.println("TOKEN " + token); 
} 
} 

サーバーサイドコード:

function send_notification ($tokens, $message) 
{ 
    $url = 'https://fcm.googleapis.com/fcm/send'; 
    $fields = array(
     'registration_ids' => $tokens, 
     'data' => $message 
     ); 
    $headers = array(
     'Authorization: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; 
} 


$tokens = array(); 
$tokens[] = "***********************************************"; 

$message = array("message" => " DEEPAK PUSH TEST MESSAGE"); 
$message_status = send_notification($tokens, $message); 
echo $message_status; 
+1

郵便あなたのコード/ logcat.Youを作成してください詳しい情報 –

+0

を与えるべきで必ず追加この**グーグルのサービス**ファイルとそれがfirebase URL 'project_info含まれています「:{ 『PROJECT_NUMBER』:『XXXXXXXXXX』を、 」 firebase_url ":" https://projectid.firebaseio.com "、 " project_id ":" projectid "、 " storage_bucket ":" projectid.appspot.com " }また、このファイルに他のパラメータが存在することを確認してから試してみてくださいあなたのコード。 –

+0

Xamppなどのローカルサーバーや無料のWebホストを使っていますか? FCMコンソールを使ってメッセージ(通知)を送ることができれば、あなたのAndroidアプリケーションコードに問題はない可能性があります。あなたのサーバーデータベースとScにFCMサーバーに投稿要求を送信するためのript。私は同様の問題を抱えていました。私のPHPコードを1000回変更した後は、私のXAMPP locatホストと同じコードが魅力的に働いていました。私のコードではなく、無料のWebホストサーバーの設定に問題がありました。あなたもそうかもしれません; – Raj

答えて

0

私は問題を解決することができました。私がjsonを生成していた形式は間違っていました。私は通知タグの下にペイロードを置いていませんでした。その変更を投稿して、作業を開始しました。すべてのあなたの提案のために多くの人、ありがとう。

関連する問題