Не получаю уведомления о пожарной базе - PullRequest
0 голосов
/ 19 сентября 2018

У меня проблема с моим приложением такси. Проект android. Все функции работают нормально, но когда клиент запрашивает поездку, водитель не получает уведомления.но драйвер может увидеть ожидающий запрос, перейдя к ожидающему действию вручную, и база данных хранит все данные в базе данных Firebase.а также, когда я тестирую отправку сообщения через облачные сообщения Firebase, я получаю уведомление как для драйвера, так и для клиентского приложения.но когда я тестирую и драйвер, и клиентское приложение, приложение само по себе не получает никакого уведомления.Кто-нибудь может помочь мне решить эту проблему?

MyFirebaseMessagingService.java 

public class MyFirebaseMessagingService extends FirebaseMessagingService {
public static int NOTIFICATION_ID = 1;

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

    sendNotification(remoteMessage.getData());
}

private void sendNotification(Map<String, String> data) {

    int num = ++NOTIFICATION_ID;
    Bundle msg = new Bundle();
    for (String key : data.keySet()) {
        Log.e(key, data.get(key));
        msg.putString(key, data.get(key));
    }
    Intent intent = new Intent(this, HomeActivity.class);
    if (msg.containsKey("action")) {
        intent.putExtra("action", msg.getString("action"));
    }
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, num /* Request code */, intent,
            PendingIntent.FLAG_ONE_SHOT);

    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.icon)
            .setContentTitle(msg.getString("title"))
            .setContentText(msg.getString("msg"))
            .setAutoCancel(true)
            .setSound(defaultSoundUri)
            .setContentIntent(pendingIntent);

    NotificationManager notificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    notificationManager.notify(num, notificationBuilder.build());
}

}

AndroidManifest.xml

   <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.prinsapps.vanittcustomer">
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />

<application
    android:name="com.prinsapps.vanittcustomer.custom.MyApplication"
    android:allowBackup="true"
    android:icon="@drawable/splash1"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    android:windowSoftInputMode="stateHidden|adjustResize">
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/google_android_map_api_key" />

    <activity android:name="com.prinsapps.vanittcustomer.acitivities.SplashActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity

android:name="com.prinsapps.vanittcustomer.acitivities.LoginActivity"
        android:windowSoftInputMode="stateHidden" />

    <activity 
android:name="com.prinsapps.vanittcustomer.acitivities.HomeActivity" />

    <service
        android:name="com.paypal.android.sdk.payments.PayPalService"
        android:exported="false" />

    <activity 
android:name="com.paypal.android.sdk.payments.PaymentActivity" />
    <activity 
android:name="com.paypal.android.sdk.payments.LoginActivity" />
    <activity 
android:name="com.paypal.android.sdk.payments.PaymentMethodActivity" />
    <activity 
android:name="com.paypal.android.sdk.payments.PaymentConfirmActivity" />
    <activity android:name="com.paypal.android.sdk.payments.PayPalFuturePaymentActivity" />
    <activity 

<service android:name=
"com.prinsapps.vanittcustomer.Server.MyFirebaseMessagingService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" 
/>
        </intent-filter>
    </service>

<service 
 android:name=
"com.prinsapps.vanittcustomer.Server.MyFirebaseInstanceIDService">


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

    <meta-data android:name="com.google.firebase.messaging.default_notification_icon"
        android:resource="@drawable/icon" />

    <meta-data

android:name="com.google.firebase.messaging.default_notification_color"
        android:resource="@color/hint" />
    <meta-data
        android:name="io.fabric.ApiKey"
        android:value="" />
</application>

</manifest>

Logcat после запроса поездки из приложения клиента

09-19 17:30:25.730 1049-1049/com.prinsapps.vanittcustomer 
D/ViewRootImpl@44dc853[HomeActivity]: ViewPostIme pointer 0
09-19 17:30:25.842 1049-1049/com.prinsapps.vanittcustomer 
D/ViewRootImpl@44dc853[HomeActivity]: ViewPostIme pointer 1
09-19 17:30:25.903 1049-1049/com.prinsapps.vanittcustomer E/apikey: 
a0igPB0w146865636K8aKoF257487585
09-19 17:30:25.949 1049-1049/com.prinsapps.vanittcustomer D/server: 
http://www.vanitt.co.uk/Dashboard/api/user/addRide/format/json
09-19 17:30:25.989 1049-1049/com.prinsapps.vanittcustomer 
D/ViewRootImpl@44dc853[HomeActivity]: Relayout returned: old=[0,0] 
[1080,1920] new=[0,0][1080,1920] result=0x1 surface={valid=true 
531651338240} changed=false
09-19 17:30:26.560 1049-1049/com.prinsapps.vanittcustomer 
V/AsyncHttpRH: Progress 257 from 194 (132%)
09-19 17:30:26.590 1049-1049/com.prinsapps.vanittcustomer W/JsonHttpRH: 
onSuccess(int, Header[], JSONObject) was not overriden, but callback 
was received
09-19 17:30:26.666 1049-1049/com.prinsapps.vanittcustomer 
D/ViewRootImpl@deac048[Toast]: setView = 
android.widget.LinearLayout{339fee1 V.E...... ......I. 0,0-0,0} TM=true 
MM=false
09-19 17:30:26.669 1049-1049/com.prinsapps.vanittcustomer V/Toast: 
Text: Side in android.widget.Toast$TN@e604406
09-19 17:30:26.672 1049-1049/com.prinsapps.vanittcustomer 
D/ViewRootImpl@deac048[Toast]: dispatchAttachedToWindow
09-19 17:30:26.702 1049-1049/com.prinsapps.vanittcustomer V/Surface: 
sf_framedrop debug : 0x4f4c, game : false, logging : 0
09-19 17:30:26.708 1049-1049/com.prinsapps.vanittcustomer 
D/ViewRootImpl@deac048[Toast]: Relayout returned: old=[0,0][0,0] new= 
[231,1596][849,1728] result=0x7 surface={valid=true 531639455744} 
changed=true
09-19 17:30:26.743 1049-1049/com.prinsapps.vanittcustomer 
D/ViewRootImpl@deac048[Toast]: MSG_RESIZED_REPORT: frame=Rect(231, 1596 
- 849, 1728) ci=Rect(0, 0 - 0, 0) vi=Rect(0, 0 - 0, 0) or=1
09-19 17:30:26.930 1049-1049/com.prinsapps.vanittcustomer 
I/Google Maps Android API: Google Play services package version: 
13280021
09-19 17:30:27.209 1049-1049/com.prinsapps.vanittcustomer D/Network: 
Network
09-19 17:30:27.346 1049-1133/com.prinsapps.vanittcustomer I/System.out: 
(HTTPLog)-Static: isSBSettingEnabled false
09-19 17:30:27.355 1049-1133/com.prinsapps.vanittcustomer I/System.out: 
(HTTPLog)-Static: isSBSettingEnabled false
09-19 17:30:27.402 1049-1131/com.prinsapps.vanittcustomer I/System.out: 
(HTTPLog)-Static: isSBSettingEnabled false
09-19 17:30:27.404 1049-1131/com.prinsapps.vanittcustomer I/System.out: 
(HTTPLog)-Static: isSBSettingEnabled false
09-19 17:30:27.409 1049-1049/com.prinsapps.vanittcustomer 
I/Choreographer: Skipped 39 frames!  The application may be doing too 
much work on its main thread.
09-19 17:30:27.435 1049-1049/com.prinsapps.vanittcustomer 
D/ViewRootImpl@44dc853[HomeActivity]: Relayout returned: old=[0,0] 
[1080,1920] new=[0,0][1080,1920] result=0x1 surface={valid=true 
531651338240} changed=false
09-19 17:30:27.444 1049-1049/com.prinsapps.vanittcustomer V/Surface: 
sf_framedrop debug : 0x4f4c, game : false, logging : 0
09-19 17:30:27.455 1049-5286/com.prinsapps.vanittcustomer V/Surface: 
sf_framedrop debug : 0x4f4c, game : false, logging : 0
09-19 17:30:27.456 1049-5286/com.prinsapps.vanittcustomer 
D/mali_winsys: EGLint new_window_surface(egl_winsys_display *, void *, 
EGLSurface, EGLConfig, egl_winsys_surface **, egl_color_buffer_format 
*, EGLBoolean) returns 0x3000,  [1080x1680]-format:2
09-19 17:30:27.507 1049-1049/com.prinsapps.vanittcustomer E/server: 

09-19 17:30:27.805 1049-1049/com.prinsapps.vanittcustomer W/JsonHttpRH: 
onSuccess(int, Header[], JSONObject) was not overriden, but callback 
was received
09-19 17:30:27.809 1049-1049/com.prinsapps.vanittcustomer E/log: 
{"status":"success","fair":{"cost":"5","unit":"$2"},"data": 
 [{"user_id":"2","name":"prinsdriver","email":"test@gmail.com",
"latitude":"5
1.4533739","longitude":"-2.131E- 
4","vehicle_info":"","distance":"0.00013425232662457948"}]}
09-19 17:30:28.397 1049-1060/com.prinsapps.vanittcustomer I/zygote64: 
NativeAllocBackground concurrent copying GC freed 36395(2MB) AllocSpace 
objects, 53(3MB) LOS objects, 50% free, 13MB/26MB, paused 863us total 
472.437ms
09-19 17:30:29.749 1049-1060/com.prinsapps.vanittcustomer I/zygote64: 
NativeAllocBackground concurrent copying GC freed 18505(644KB) 
AllocSpace objects, 0(0B) LOS objects, 49% free, 13MB/26MB, paused 
754us total 378.443ms
09-19 17:30:30.133 1049-1049/com.prinsapps.vanittcustomer 
D/ViewRootImpl@deac048[Toast]: dispatchDetachedFromWindow
09-19 17:30:30.135 1049-1049/com.prinsapps.vanittcustomer 
D/InputEventReceiver: channel 'e2bfa7c Toast (client)' ~ Disposing 
input event receiver.
09-19 17:30:30.136 1049-1049/com.prinsapps.vanittcustomer 
D/InputEventReceiver: channel 'e2bfa7c Toast (client)' 
 ~NativeInputEventReceiver.
 09-19 17:30:33.182 1049-1132/com.prinsapps.vanittcustomer 
  I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
  09-19 17:30:33.185 1049-1132/com.prinsapps.vanittcustomer 
  I/System.out: (HTTPLog)-Static: isSBSettingEnabled false

MyFirebaseInstanceIDService.java

private static final String TAG = "firebase token";

@Override
public void onTokenRefresh() {

    final String refreshedToken = FirebaseInstanceId.getInstance().getToken();

    sendRegistrationToServer(refreshedToken);
}

private void sendRegistrationToServer(String token) {
    // TODO: Implement this method to send token to your app server.

    RequestParams params = new RequestParams();
    SessionManager.getInstance().setGcmToken(token);
    Server.setHeader(SessionManager.getInstance().getKEY());
    params.put("user_id", SessionManager.getInstance().getUid());
    params.put("gcm_token", token);
    Server.postSync("api/user/update/format/json", params, new JsonHttpResponseHandler() {
        @Override
        public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
            super.onSuccess(statusCode, headers, response);
            Log.d(TAG, response.toString());
        }

        @Override
        public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
            super.onFailure(statusCode, headers, responseString, throwable);
            Log.d(TAG, responseString);
        }
    });

}
}

Ответы [ 3 ]

0 голосов
/ 19 сентября 2018

Сначала убедитесь, что FCM был интегрирован в вашу реализацию на стороне сервера, чтобы отправить уведомление приложению драйвера (на конкретный маркер регистрации Firebase для этого драйвера).И если да, то убедитесь, какой тип сообщения вы получаете с сервера, а затем примените требуемый код в классе FirebaseMessagingService, чтобы получить этот тип сообщения (так как он отличается для каждого типа).

С помощью FCM вы можете отправлять клиентам два типа сообщений:

1. Сообщения уведомления, иногда называемые «отображаемыми сообщениями».Они обрабатываются в FCM SDK автоматически.

2. Сообщения с данными, которые обрабатываются клиентским приложением.

следующий код может получить оба случая: -

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    Log.d(TAG, "From: " + remoteMessage.getFrom());

// Check if message contains a data payload.
if (remoteMessage.getData().size() > 0) {
    Log.d(TAG, "Message data payload: " + remoteMessage.getData());

    if (/* Check if data needs to be processed by long running job */ true) {
        // For long-running tasks (10 seconds or more) use Firebase Job Dispatcher.
        scheduleJob();
    } else {
        // Handle message within 10 seconds
        handleNow();
    }

}

// Check if message contains a notification payload.
if (remoteMessage.getNotification() != null) {
    Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
}

// Also if you intend on generating your own notifications as a result of a received FCM
// message, here is where that should be initiated. See sendNotification method below.
}
0 голосов
/ 05 октября 2018

В моем коде нет ничего плохого, я сменил другое устройство для проверки и получения всех уведомлений, поэтому проблема с устройством.

0 голосов
/ 19 сентября 2018

Вы забыли переопределить метод onNewToken(String token) в своем классе MyFirebaseMessagingService.

Этот метод даст вам токен FCM, который будет использоваться вашим сервером для отправки уведомлений в приложение дайвера.

Перейдите по этой ссылке , в ней есть подробное пошаговое объяснение настройки клиентских приложений для получения уведомлений с сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...