Отправка push-уведомлений на сервер FCM не работает - PullRequest
0 голосов
/ 16 марта 2019

Я новичок в Android Studio. В настоящее время я работаю над push-уведомлением FCM, но код не отправляет никаких удаленных сообщений на сервер FCM. При отправке удаленного сообщения с сервера FCM оно ловит удаленное сообщение, но при отправке удаленного сообщения из приложения Android на сервер FCM приложение не отлавливает какие-либо удаленные сообщения обратно с сервера. Пожалуйста, помогите.

Это мой код Java для отправки удаленного сообщения:

URL url2 = new URL("https://fcm.googleapis.com/fcm/send");
                    HttpsURLConnection conn = (HttpsURLConnection) url2.openConnection();
                    conn.setUseCaches(false);
                    conn.setDoInput(true);
                    conn.setDoOutput(true);

                    conn.setRequestMethod("POST");
                    conn.setRequestProperty("Authorization", "key=AIzaSyxxxxxxxxxxxxxxxxxxxxxxxxrjM");
                    conn.setRequestProperty("Content-Type", "application/json");

                    JSONObject json = new JSONObject();

                    json.put("to", regToken);


                    JSONObject info = new JSONObject();
                    info.put("title", "New order from " + name);   // Notification title
                    info.put("body", "Order ID " + order_number); // Notification body

                    json.put("data", info);

                    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
                    wr.write(json.toString());
                    wr.flush();
                    conn.getInputStream();

                    //Toast.makeText(ctx, token, Toast.LENGTH_SHORT).show();

                } catch (Exception e) {
                    Log.d("Error", "" + e);
                }

Мой сервис для получения удаленного сообщения;

 public class FireBaseMsgService extends FirebaseMessagingService {

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);
                NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

                Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
                String channelId = "channel-01";
                String channelName = "Channel";
                int importance = NotificationManager.IMPORTANCE_HIGH;

                if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
                    NotificationChannel mChannel = new NotificationChannel(
                            channelId, channelName, importance);
                    notificationManager.createNotificationChannel(mChannel);
                }


                NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, channelId)
                        .setSmallIcon(R.drawable.ic_launcher_background)
                        .setContentTitle(remoteMessage.getNotification().getTitle())
                        .setContentText(remoteMessage.getNotification().getBody())
                        .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher_background))
                        .setAutoCancel(true)
                        .setColor(0xffff7700)
                        .setVibrate(new long[]{100, 100, 100, 100})
                        .setPriority(Notification.PRIORITY_MAX)
                        .setSound(defaultSoundUri);
                Intent resultIntent = new Intent(this, Orders.class);

                TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
                stackBuilder.addParentStack(Orders.class);
                stackBuilder.addNextIntent(resultIntent);
                PendingIntent resultPendingIntent =
                        stackBuilder.getPendingIntent(
                                0,
                                PendingIntent.FLAG_UPDATE_CURRENT
                        );


                notificationBuilder.setContentIntent(resultPendingIntent);
                NotificationManager mNotificationManager =
                        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

                mNotificationManager.notify(1, notificationBuilder.build());

        }

    } 

Реализован сервис в Манифесте:

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

1 Ответ

0 голосов
/ 04 апреля 2019
  FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(this, new OnSuccessListener<InstanceIdResult>() {
            @Override
            public void onSuccess(InstanceIdResult instanceIdResult) {
                newToken = instanceIdResult.getToken();
                devicetoken();
                Log.e("newToken", newToken);
            }
        });

После внедрения в вашу деятельность :

  mrequestqueue = Volley.newRequestQueue(ContributorDetailsActivity.this);
                JSONObject mainobj = new JSONObject();
                try {
                    mainobj.put("to",token);
                    JSONObject notificationObj = new JSONObject();
                    notificationObj.put("title","Accepted Your Request");
                    notificationObj.put("body","your request is accepted by " + " " + distributorname);
                    mainobj.put("notification",notificationObj);

                    JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, URL, mainobj, new Response.Listener<JSONObject>() {
                        @Override
                        public void onResponse(JSONObject response) {
                            Log.e("success", response.toString());
                            Toast.makeText(ContributorDetailsActivity.this, "successfull", Toast.LENGTH_LONG).show();
                            updatestatus();


                        }
                    }, new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Log.e("error", error.toString());

                        }
                    }) {
                        @Override
                        public Map<String, String> getHeaders() throws AuthFailureError {
                            Map<String, String> header = new HashMap<>();
                            header.put("content-type", "application/json");
                            header.put("authorization", "key=your FCM key");
                            return header;
                        }
                    };
                    mrequestqueue.add(request);

                } catch (JSONException e) {
                    //do nothing
                }
...