it-swarm.com.de

Fehlerhafte Benachrichtigung: RemoteViews für StatusBarNotification konnten nicht erweitert werden. auf Android Nougat

Ich verwende OneSignal SDK, um Benachrichtigungen anzuzeigen. Ich mache es in OneSignalPushService.Java.

OneSignalPushService.Java:

public class OneSignalPushService extends NotificationExtenderService {

    @Override
    protected boolean onNotificationProcessing(OSNotificationReceivedResult notification) {

        if (!TinyDbWrap.getInstance().isPushEnabled()) {
            KLog.d(this.getClass().getSimpleName(), "Notification will not displayed");
            return true;
        }

        OverrideSettings overrideSettings = new OverrideSettings();
        overrideSettings.extender = new NotificationCompat.Extender() {
            @Override
            public NotificationCompat.Builder extend(NotificationCompat.Builder notificationBuilder) {
                notificationBuilder.setDefaults(0);
                notificationBuilder.setContentTitle(getApplicationContext().getResources().getString(R.string.app_name));

                boolean is_in_silent_mode = false; /*or true by user's settings in app*/
                /*TinyDbWrap.getInstance()... - it stores user's settings*/
                KLog.d(OneSignalPushService.class.getSimpleName(), "Notification isSoundPushEnabled: " + TinyDbWrap.getInstance().isSoundPushEnabled());
                if (!is_in_silent_mode && TinyDbWrap.getInstance().isSoundPushEnabled()) {
                    notificationBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
                } else {
                    notificationBuilder.setSound(null);
                }

                KLog.d(OneSignalPushService.class.getSimpleName(), "Notification isVibrationPushEnabled: " + TinyDbWrap.getInstance().isVibrationPushEnabled());
                if (!is_in_silent_mode && TinyDbWrap.getInstance().isVibrationPushEnabled()) {
                    notificationBuilder.setVibrate(new long[]{0, 100, 200, 300, 400});
                } else {
                    notificationBuilder.setVibrate(new long[]{0});
                }

                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
                    notificationBuilder.setColor(ContextCompat.getColor(getApplicationContext(), R.color.bg_first_item_white_scheme));
                }
                notificationBuilder.setLights(ContextCompat.getColor(getApplicationContext(), R.color.time_white_sheme), 500, 500);
                return notificationBuilder;
            }
        };

        OSNotificationDisplayedResult result = displayNotification(overrideSettings);
        if (result != null) {
            KLog.d(OneSignalPushService.class.getSimpleName(), "Notification displayed with id: " + result.androidNotificationId);
        }

        return true;
    }

}

Das funktioniert gut auf allen meinen Geräten, aber:

Ich erhalte eine große Anzahl dieses Problems bei Crashlytics nur auf Geräten mit Android-Nougat:

Schwerwiegende Ausnahme: Android.app.RemoteServiceException: Fehlerhafte Benachrichtigung gepostet aus Paket my.package: RemoteViews für: .__ konnte nicht erweitert werden. StatusBarNotification (pkg = my.package user = UserHandle {0} id = -1542711428 tag = null key = 0 | mein.package | -1542711428 | null | 10184: Benachrichtigung (pri = 0 contentView = null vibrate = null sound) = null Standardwerte = 0x0 Flags = 0x19 Farbe = 0xff56a0d3 vis = PUBLIC semFlags = 0x0 semPriority = 0)) at Android.app.ActivityThread $ H.handleMessage (ActivityThread.Java:1813) bei Android.os.Handler.dispatchMessage (Handler.Java:102) unter Android.os.Looper.loop (Looper.Java:154) unter Android.app.ActivityThread.main (ActivityThread.Java:6776) at Java.lang.reflect.Method.invoke (Method.Java) at com.Android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.Java:1496) at com.Android.internal.os.ZygoteInit.main (ZygoteInit.Java:1386)

Leider kann ich dieses Problem mit Android Nougat nicht auf meinen Geräten reproduzieren, um zu verstehen, wie ich es beseitigen kann.

Ich habe versucht, Grafikressourcen wie Benachrichtigungssymbole zu ändern, das Projekt zu bereinigen, um diesem Hinweis zu folgen.

Ich habe festgestellt, dass die Anzahl der Geräte mit diesem Problem für eine Woche ansteigt, wenn ich später eine neue Version der App freigebe, diese Zahl sinkt auf null.

Dieses Problem auch an Google gemeldet und Entwickler von OneSignal SDK .

Ich suche nach Problemumgehungen, Ideen oder Vorschlägen, die dazu beitragen können, dieses Problem zu beheben.

14
Dima Kozhevin

Ich denke, dieser Absturz tritt auf, weil Ihre Benachrichtigung die Ganzzahlreferenz auf das Symbol im PendingIntent-Bundle enthält und diese Ganzzahl später beim Senden an den NotificationManager referenziert wurde.

Zwischen dem Abrufen der Ganzzahlreferenz und der ausstehenden Absicht wurde die App aktualisiert, und alle Zeichenreferenzen wurden geändert. Die Ganzzahl, die früher auf das korrekte Zeichenelement Bezug genommen hat, referenzierte jetzt entweder auf das falsche Zeichenelement oder auf keines (überhaupt nicht - dies verursacht diesen Absturz).

Dies wird durch bewiesen 

Ich habe festgestellt, dass die Anzahl der Geräte mit diesem Problem für eine Woche ansteigt Wenn ich später eine neue Version der App freigebe, sinkt diese Zahl bis Null.

Als Lösung können Sie alle Benachrichtigungen neu erstellen, nachdem die Anwendung aktualisiert wurde.

9
Dmitriy Puchkov

Die Entwickler von OneSignal schlagen vor, die nächste a work around durchzuführen:

Fügen Sie Folgendes unter dem <application>-Tag in einem AndroidManifest.xml hinzu.

<manifest ...>
    <application ...>
        ...
        <receiver Android:name="com.onesignal.UpgradeReceiver" tools:node="remove" />
    </application>
</manifest>

Diese Abstürze verschwanden, als ich diese vorübergehende Lösung durchführte.

0
Dima Kozhevin