Уведомление FCM не работает в китайском телефоне при удалении приложения из недавнего - PullRequest
0 голосов
/ 23 января 2019

У меня есть тестирование моего приложения в motorola, samsung работает нормально, когда приложение убито. но когда я тестирую приложение in vivo, напротив, если приложение не работает, приложение уничтожается.

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

if (remoteMessage == null)
    return;

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

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

    try {
        JSONObject json = new JSONObject(remoteMessage.getData().toString());
        handleDataMessage(json);
    } catch (Exception e) {
        Log.e(TAG, "Exception: " + e.getMessage());
    }
}

}

Манифест Android xml:

 <service
    android:name="notification.MyFirebaseMessagingService"
    android:exported="true">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>
<service android:name="notification.MyFirebaseInstanceIDService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
    </intent-filter>
</service>

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Удалить из недавней задачи, система немедленно убьет приложение.Так что не делайте этого.

Firebase был заблокирован GFW в Китае.Сервис Google нельзя использовать в Китае.Если вы хотите использовать Firebase в Китае, включите VPN.

Начиная с 8.0, API имеет ограничение: https://developer.android.com/about/versions/oreo/background

За пределами Китая нет проблем с сетью.Система OEM имеет свои собственные ограничения поведения фона.Даже если не удалить из недавнего, когда приложение на заднем плане, оно будет убито.Даже если служба startForeground (), они не следуют поведению API.Трудно сохранить какой-либо фоновый сервис.Пользователи должны сначала добавить его в белый список.Но у каждой OEM-системы свой путь.

我 就是 中国 的 Android 程序员 ...

0 голосов
/ 23 января 2019

Также я реализовал эти строки в своем основном классе для запуска автозапуска,

      Intent intent = new Intent();
    String manufacturer = android.os.Build.MANUFACTURER;
    System.out.println("manufacturer : "+manufacturer);
    switch (manufacturer) {
        case "xiaomi":
            intent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity"));
            break;
        case "oppo":
            intent.setComponent(new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.permission.startup.StartupAppListActivity"));
            // intent.setComponent(new ComponentName("com.oppo.safe", "com.oppo.safe.permission.startup.StartupAppListActivity"));
            break;
        case "vivo":
            intent.setComponent(new ComponentName("com.vivo.permissionmanager", "com.vivo.permissionmanager.activity.BgStartUpManagerActivity"));
            break;
        case "Honor":
            intent.setComponent(new ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.optimize.process.ProtectActivity"));
            break;
        /*case "samsung":
            intent.setComponent(new ComponentName("com.samsung.android.lool", "com.samsung.android.sm.ui.battery.BatteryActivity"));
            break;*/
        case "htc":
            intent.setComponent(new ComponentName("com.htc.pitroad", "com.htc.pitroad.landingpage.activity.LandingPageActivity"));
            break;
        case "asus":
            intent.setComponent(new ComponentName("com.asus.mobilemanager", "com.asus.mobilemanager.MainActivity"));
            break;
    }
    List<ResolveInfo> arrayList =  getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
    if (arrayList.size() > 0) { startActivity(intent); }

Но уведомление не приходит по этой линии в случае оппо.

...