没有收到Firebase通知

时间:2018-09-19 16:40:38

标签: android firebase firebase-cloud-messaging

我的出租车应用程序android project遇到问题。所有功能正常,但当客户要求乘车时,驾驶员未收到通知。但是驱动程序可以通过手动转到待处理活动来查看待处理请求,并将数据库中的所有数据存储在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 :(得分:0)

最初请确保FCM已集成到您的服务器端实现中,以将通知发送到驱动程序应用程序(发送到该驱动程序的特定Firebase注册令牌)。如果是,则确保从服务器获取哪种类型的message,然后在x = y = 0x0123类中应用所需的代码以获取该消息类型(因为每种类型的消息类型不同)。

使用FCM,您可以向客户端发送两种类型的消息:

1.Notification消息,有时被称为“显示消息”。这些由FCM SDK自动处理。

2。数据消息,由客户端应用处理。

以下代码可以得到两种情况:-

FirebaseMessagingService

答案 1 :(得分:0)

我的代码没有错,我更换了另一台设备进行测试并获取所有通知,因此该设备出现了问题。

答案 2 :(得分:-2)

您忘记了onNewToken(String token)类中的MyFirebaseMessagingService方法。

该方法将为您提供FCM令牌,服务器将使用该令牌向潜水员应用发送通知。

遵循link之后,它逐步详细说明了如何设置客户端应用程序以接收来自服务器的通知。