Как исправить встроенное приложение Firebase (облачное сообщение), которое отвечает пустым?

Я работаю над проектом на основе учебника. Инструктор использует Firebase для отправки уведомления серверному приложению [Android]. в порядке вставки, когда я отправляю заказ, он ничего не делает, но все равно отправит заказ.

В клиентском приложении после того, как этот клиент отправит заказ, на основе кода я должен получить всплывающее сообщение при успешной отправке уведомления. вот все коды связаны.

Интерфейс IFCM:

public interface IFCMService {
@Headers(
        {

                "Content-Type:application/json",
                "Authorization:key=****"
        }
)
@POST("fom/send")
Call<MyResponse> sendNotification(@Body DataMessage body);
}

MyFirebaseMessaging.java

public class MyFirebaseMessaging extends FirebaseMessagingService {

@Override
public void onNewToken(String s) {
    super.onNewToken(s);
    if (Common.currentUser != null)
        updateTokenToFirebas(s);
}

private void updateTokenToFirebas(String token) {
    IDrinkShopAPI mService = Common.getAPI();
    mService.updateToken(Common.currentUser.getPhone(),
            token,
            "0")
            .enqueue(new Callback<String>() {
                @Override
                public void onResponse(Call<String> call, Response<String> response) {
                    Log.d("DEBUG",response.toString());
                }

                @Override
                public void onFailure(Call<String> call, Throwable t) {
                    Log.d("DEBUG",t.getMessage());
                }
            });

}

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);

    if (remoteMessage.getData() !=null)
    {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
            sendNotificationAPI26(remoteMessage);
        else
            sendNotification(remoteMessage);
    }
}

private void sendNotificationAPI26(RemoteMessage remoteMessage) {
    //Get information from Message
    Map<String,String> data = remoteMessage.getData();
    String title = data.get("title");
    String message = data.get("message");

    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentTitle(title)
            .setContentText(message)
            .setAutoCancel(true)
            .setSound(defaultSoundUri);

    NotificationManager noti = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
    noti.notify(new Random().nextInt(),builder.build());
}

private void sendNotification(RemoteMessage remoteMessage) {

    Map<String,String> data = remoteMessage.getData();
    String title = data.get("title");
    String message = data.get("message");

    //From API Level 26 , we need implement Notification Channel
    NotificationHelper helper;
    Notification.Builder builder;

    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    helper = new NotificationHelper(this);
    builder = helper.getDrinkShopNotification(title,message,defaultSoundUri);

    helper.getManager().notify(new Random().nextInt(),builder.build());
}
}

FCMClient.java

public class FCMClient {
private static Retrofit retrofit = null;

public static Retrofit getClient(String baseUrl)
{
    if (retrofit == null)
        retrofit = new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    return retrofit;
}
}

Common.java

private static final String FCM_API = "https://fcm.googleapis.com/";

public static IFCMService getGetFCMService()
{
    return FCMClient.getClient(FCM_API).create(IFCMService.class);
}

CartActivity.java:

     private void sendOrderToServer(float sumPrice, List<Cart> carts, String orderComment, String orderAddress) {
    if (carts.size() > 0)
    {
        String orderDetail = new Gson().toJson(carts);

        mService.submitOrder(sumPrice,orderDetail,orderComment,orderAddress,Common.currentUser.getPhone())
                .enqueue(new Callback<OrderResult>() {
                    @Override
                    public void onResponse(Call<OrderResult> call, Response<OrderResult> response) {
                        sendNotificationToServer(response.body());
                    }

                    @Override
                    public void onFailure(Call<OrderResult> call, Throwable t) {
                        Toast.makeText(CartActivity.this, ""+t.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                });
    }
}
    private void sendNotificationToServer(final OrderResult orderResult) {

    mService.getToken("server_app_01","1")
            .enqueue(new Callback<Token>() {
                @Override
                public void onResponse(Call<Token> call, Response<Token> response) {
                    Map<String,String> contentSend = new HashMap<>();
                    contentSend.put("title","ATLASco");
                    contentSend.put("message","سفارش جدید دریافت شد"+orderResult.getOrderId());
                    DataMessage dataMessage = new DataMessage();
                    if (response.body().getToken() != null)
                        dataMessage.setTo(response.body().getToken());
                    dataMessage.setData(contentSend);

                    IFCMService ifcmService = Common.getGetFCMService();
                    ifcmService.sendNotification(dataMessage)
                            .enqueue(new Callback<MyResponse>() {
                                @Override
                                public void onResponse(Call<MyResponse> call, Response<MyResponse> response) {

                                    Toast.makeText(CartActivity.this, "Response" + response.body(), Toast.LENGTH_SHORT).show();

                                    if (response.code() == 200)
                                    {
                                        if (response.body().success == 1)
                                        {
                                            Toast.makeText(CartActivity.this, "submitted", Toast.LENGTH_SHORT).show();

                                            Common.cartRepository.emptyCart();
                                            finish();
                                        }
                                        else
                                        {
                                            Toast.makeText(CartActivity.this, "Error!", Toast.LENGTH_SHORT).show();
                                        }
                                    }
                                }

                                @Override
                                public void onFailure(Call<MyResponse> call, Throwable t) {
                                    Toast.makeText(CartActivity.this, ""+t.getMessage(), Toast.LENGTH_SHORT).show();
                                }
                            });
                }

                @Override
                public void onFailure(Call<Token> call, Throwable t) {
                    Toast.makeText(CartActivity.this, ""+t.getMessage(), Toast.LENGTH_SHORT).show();
                }
            });

}

В приведенном выше коде в корзине я добавил сообщение Toast перед if (response.code() == 200), и оно отвечает Null.

Есть какие-нибудь идеи, что происходит? также у меня есть php api, который я мог бы добавить к этому.

отладчик:

Как исправить встроенное приложение Firebase (облачное сообщение), которое отвечает пустым?

вы можете попробовать несколько вещей, сначала попробуйте, успешно ли вы зарегистрировали устройство на сервере FCM или нет. Во-вторых, используйте почтальон для отправки уведомления в fcm, а затем выполните отладку в клиенте, если вы получаете его правильно.

aurilio 14.08.2018 13:38

@aurilio есть помощник?

Mohammad Eskandari 14.08.2018 22:09
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
559
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас есть опечатка в коде IFCMService

используйте приведенный ниже исправленный код IFCMService

   public interface IFCMService {
@Headers(
        {

                "Content-Type:application/json",
                "Authorization:key=****"
        }
)
@POST("fcm/send")
Call<MyResponse> sendNotification(@Body DataMessage body);
}

в сообщении вы пишете fom / send, что неверно, поэтому вы получаете ошибку 404 при отладке. Скопируйте приведенный выше код и вставьте в интерфейс IFCMService.

Другие вопросы по теме