2017-05-26 8 views
0

Javaで書かれたこの小さなプログラムはfirebaseクラウドメッセージングを通して私のアンドロイドアプリに通知を送信するはずです。現在、FCMとの接続は、受信した制限付き応答コード(200、OK)に従って成功しているようです。ただし、Androidアプリでは通知は受信されません。FCMへのHTTP POST 200成功、Androidアプリの通知なし

同じサーバーキーに別のサードパーティ製のJavaアプリケーションを使用すると、通知は同じAndroidアプリケーションで正常に配信されます。この場合はそうではありません。

デバイストークンの部分に問題があると思います。特定のデバイスに通知を送信する必要はありません。自分のデバイスに届いている限り、すべての/使用可能なデバイスに通知を送信します。

import java.io.OutputStream; 
import java.net.HttpURLConnection; 
import java.net.URL; 

public class AndroidPush { 

    /** 
    * Replace SERVER_KEY with your SERVER_KEY generated from FCM 
    * Replace DEVICE_TOKEN with your DEVICE_TOKEN 
    */ 
    private static String SERVER_KEY = "AAA*******APA91bH2i5FGIhBhMj3YEf0yCq*********************************************************************"; 
    private static String DEVICE_TOKEN = "caNraerHp9M:APA91bEKyYHV9ymsFh4xXyii****************"; 


    /** 
    * USE THIS METHOD to send push notification 
    */ 
    public static void main(String[] args) throws Exception { 
     String title = "My First Notification"; 
     String message = "Hello, I'm push notification"; 
     sendPushNotification(title, message); 
    } 


    /** 
    * Sends notification to mobile 
    */ 
    private static void sendPushNotification(String title, String message) throws Exception { 
     String pushMessage = "{\"data\":{\"title\":\"" + 
       title + 
       "\",\"message\":\"" + 
       message + 
       "\"},\"to\":\"" + 
       DEVICE_TOKEN + 
       "\"}"; 
     // Create connection to send FCM Message request. 
     URL url = new URL("https://fcm.googleapis.com/fcm/send"); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setRequestProperty("Authorization", "key=" + SERVER_KEY); 
     conn.setRequestProperty("Content-Type", "application/json"); 
     conn.setRequestMethod("POST"); 
     conn.setDoOutput(true); 

     // Send FCM message content. 
     OutputStream outputStream = conn.getOutputStream(); 
     outputStream.write(pushMessage.getBytes()); 

     System.out.println(conn.getResponseCode()); 
     System.out.println(conn.getResponseMessage()); 
    } 
} 

応答コード: OK

Androidアプリケーション

public class MainActivity extends AppCompatActivity { 

    // defining the constant for the tag in onTokenRefresh 
    private static final String TAG = "TFA_service"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     onTokenRefresh(); 
     //get all server-FCM-Android notifications 
     FirebaseMessaging.getInstance().subscribeToTopic("ALL"); 

    } 

    public void onTokenRefresh() { 
     // Get updated InstanceID token. 
     String refreshedToken = FirebaseInstanceId.getInstance().getToken(); 
     Toast.makeText(this, refreshedToken, Toast.LENGTH_SHORT).show(); 
     Log.d(TAG, "Refreshed token: " + refreshedToken); 
     System.out.println(refreshedToken); 

     // TODO: Implement this method to send any registration to your app's servers. 
     System.out.println("Registration.onTokenRefresh TOKEN: " + refreshedToken); 
    } 

答えて

0

私も、私は次の内容を追加しますので、同じproblem.Iも通知をreciveなかった直面していましたjson作成時のコード行、

{ 
    "content_available": true, 
    "priority": "high", 
    "to": "efxA1bbRGrE:APA91bGmmYrGQBJ6QrM-LOimnbnwMo3WL9MQxJuyuyYdieph0o_P32oouovPB72SFO6ruyyubZKI-RCLAoE1xKQHZFcyVnVfJp92dUAN3-JUcWISplxjqoMjlAzAV6HIdM0n56yw0FxXr7OX44ZzwJ4N", 
    "notification": { 
     "title": "Strawberry", 
     "body": "Hello This is notification test from FCM" 
    } 
} 
{ 
    Authorization: key=AAAAf0KIvao: APA91bE9eCULa0POdBP94xEPtUeazF_j2XGFcz6GH49RroNmsAmrWt1QG8WYpDFaIoipRtK0Cdn1_2Vz94OoWUlV-4H2IDxwtXM1hAuxcmXn-tcspEbODzsKpcXJjfhaoK2HWTTLHoZlSender: id=546uy577u1042uyuy98Content-Type: application/json 
} 

Javaファイルで上記のコードを使用すると役立ちます。

+0

「sendRegistrationToServer(refreshedToken); 」を実装していない状態で、FCMデバイストークンに送信しようとしているようですが、トピックを使用して送信します。 – Rami

+0

@ラミ私の提案が何らかの形であなたを助けたら私の答えを受け入れるべきです。 –

+0

私のファイルであなたのコードを使ってみましたが、コードに組み込む方法がわかりません(私は初心者です)。 – Rami