У меня проблема с моим приложением такси. Проект 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);
}
});
}
}