5

GoogleCloudMessaging.getInstance(context).send(context.getString(R.string.gcm_defaultSenderId) + "@gcm.googleapis.com", mId, mBundle);アップストリーム メッセージを送信するために使用していましたが、新しいfcm概念を移行しようとしていたため、それも変更する必要がありますが、まだドキュメントを見つけることができませんでした。

私の最善の推測は、使用することです:

RemoteMessage message = new RemoteMessage.Builder(<?>).setMessageId(mId).setData ...
FirebaseMessaging.getInstance().send(message);

しかし、ビルダーがパラメーターとして取るのは何ですか? 繰り返しますが、APIが見つかりませんでした...

fcmタイトルが示すように、新しい概念を使用してアップストリーム メッセージを送信するにはどうすればよいでしょうか?

4

2 に答える 2

10

さて、私の答えはすぐに出ます。今後の参考のために、質問と回答を保管しておいてください。https://firebase.google.com/docs/cloud-messaging/android/upstream#sample-sendで答えを見つけました

検索結果からの Google のスマートな除外のおかげでIn order to show you the most relevant results, we have omitted some entries very similar to the 2 already displayed. If you like, you can repeat the search with the omitted results included.

新しい API は次のようになります。

FirebaseMessaging fm = FirebaseMessaging.getInstance();
fm.send(new RemoteMessage.Builder(SENDER_ID + "@gcm.googleapis.com")
  .setMessageId(Integer.toString(msgId.incrementAndGet()))
  .addData("my_message", "Hello World")
  .addData("my_action","SAY_HELLO")
  .build());
于 2016-05-20T03:39:31.680 に答える
1

AndroidアプリケーションからAndroidデバイスにメッセージを直接送信できます。これは私が行った簡単な実装であり、私にとってはうまく機能します。

  1. Androidボレーライブラリをコンパイルする

    compile 'com.android.volley:volley:1.0.0'
    
  2. このシンプルな機能をコピペするだけで、あなたの人生はバターにナイフを入れたように滑らかになります。:D

    public static void sendPushToSingleInstance(final Context activity, final HashMap dataValue /*your data from the activity*/, final String instanceIdToken /*firebase instance token you will find in documentation that how to get this*/ ) {
    
    
    final String url = "https://fcm.googleapis.com/fcm/send";
    StringRequest myReq = new StringRequest(Request.Method.POST,url,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    Toast.makeText(activity, "Bingo Success", Toast.LENGTH_SHORT).show();
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(activity, "Oops error", Toast.LENGTH_SHORT).show();
                }
            }) {
    
        @Override
        public byte[] getBody() throws com.android.volley.AuthFailureError {
            Map<String,String> rawParameters = new Hashtable<String, String>();
            rawParameters.put("data", new JSONObject(dataValue).toString());
            rawParameters.put("to", instanceIdToken);
            return new JSONObject(rawParameters).toString().getBytes();
        };
    
        public String getBodyContentType()
        {
            return "application/json; charset=utf-8";
        }
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            HashMap<String, String> headers = new HashMap<String, String>();
            headers.put("Authorization", "key="+YOUR_LEGACY_SERVER_KEY_FROM_FIREBASE_CONSOLE);
            return headers;
        }
    
    };
    
    Volley.newRequestQueue(activity).add(myReq);
    }
    

メモトピックにメッセージを送信したい場合は、パラメーターinstanceIdTokenを/topics/topicNameのようなものに 変更できます。グループの実装は同じですが、パラメータを処理するだけで済みます。Firebaseのドキュメントをチェックアウトすると、それらのパラメーターを渡すことができます。 問題が発生した場合はお知らせください。

于 2017-04-24T05:22:33.723 に答える