Уведомление Android OneSignal не может открыть "Закрытое" приложение - PullRequest
0 голосов
/ 21 января 2019

Я получаю уведомления с помощью OneSignal, если мое приложение было в фоновом режиме, и я нажимаю на пришедшее уведомление, приложение открывается нормально, как я хотел, чтобы перейти к запрошенной активности без каких-либо проблем!Но если приложение не было запущено, я имею в виду полностью закрытое, после нажатия на уведомление ничего не происходит вообще!приложение не открывается!уведомление уходит, не открывая приложение!любой совет?

Вот код, который я использую для обработки уведомлений OneSignal

 private class NotificationOpenedHandler implements OneSignal.NotificationOpenedHandler {
    // This fires when a notification is opened by tapping on it.
    @Override
    public void notificationOpened(OSNotificationOpenResult result) {
        OSNotificationAction.ActionType actionType = result.action.type;
        JSONObject data = result.notification.payload.additionalData;
        String launchUrl = result.notification.payload.launchURL; // update docs launchUrl
        String body = result.notification.payload.body; // update docs launchUrl

        String customKey;
        String openURL = null;
        Object activityToLaunch = MainActivity.class;

        if (data != null) {
            customKey = data.optString("customkey", null);
            openURL = data.optString("openURL", null);

            if (customKey != null)
                Log.i("OneSignalExample", "customkey set with value: " + customKey);

            if (openURL != null)
                Log.i("OneSignalExample", "openURL to webview with URL value: " + openURL);
        }

        if (actionType == OSNotificationAction.ActionType.ActionTaken) {
            Log.i("OneSignalExample", "Button pressed with id: " + result.action.actionID);

            if (result.action.actionID.equals("id1")) {
                Log.i("OneSignalExample", "button id called: " + result.action.actionID);
                activityToLaunch = Notifications.class;
            } else
                Log.i("OneSignalExample", "button id called: " + result.action.actionID);
        }
        // The following can be used to open an Activity of your choice.

        Intent toActivity = new Intent(MainActivity.this, Notifications.class);
        toActivity.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK);

        toActivity.putExtra("openURL", launchUrl);

        toActivity.putExtra("body", body);

        Log.i("OneSignalExample", "openURL = " + launchUrl);

        //my Code
        String message;
        SharedPreferences sharedPreferences = getSharedPreferences(NOTES, Context
                .MODE_PRIVATE);
        String jsonLink = sharedPreferences.getString(NOTES_LINKS, null);
        String jsonTitle = sharedPreferences.getString(NOTES_TITLE, null);

        if (jsonLink != null && jsonTitle != null) {

            Gson gson = new Gson();
            ArrayList<String> linkList = gson.fromJson(jsonLink, new TypeToken<ArrayList<String>>() {
            }.getType());

            ArrayList<String> titleList = gson.fromJson(jsonTitle, new TypeToken<ArrayList<String>>() {
            }.getType());

            if (linkList.contains(launchUrl)) {
                message = "Notification Exist!";
                Log.i("Notifications","Notification Exist!");

            } else {
                linkList.add(launchUrl);
                titleList.add(body.trim());
                SharedPreferences.Editor editor = sharedPreferences.edit();
                editor.putString(NOTES_LINKS, new Gson().toJson(linkList));
                editor.putString(NOTES_TITLE, new Gson().toJson(titleList));
                editor.apply();

                Log.i("Notifications","Notification Stored!");

            }
        } else {

            ArrayList<String> linkList = new ArrayList<>();
            ArrayList<String> titleList = new ArrayList<>();
            linkList.add(launchUrl);
            titleList.add(body.trim());
            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.putString(NOTES_LINKS, new Gson().toJson(linkList));
            editor.putString(NOTES_TITLE, new Gson().toJson(titleList));
            editor.apply();

            Log.i("Notifications","Stored");

        }
        // startActivity(intent);
        startActivity(toActivity);
    }
}

Ответы [ 2 ]

0 голосов
/ 08 августа 2019

Я сталкивался с той же проблемой и раньше и смог ее решить, создав класс приложения и инициализировав в нем oneSignal

    public class Application extends android.app.Application {
    @Override
    public void onCreate() {
        super.onCreate();
        // OneSignal Initialization
        OneSignal.startInit(this)
                .inFocusDisplaying(OneSignal.OSInFocusDisplayOption.Notification)
                .unsubscribeWhenNotificationsAreDisabled(true)
                .setNotificationOpenedHandler(new NotificationHandler(this))
                .init();
    }
}

, вам также необходимо добавить их в манифест

<application 
   android:name="Application"
   ...>
    <meta-data android:name="com.onesignal.NotificationOpened.DEFAULT" android:value="DISABLE" />
</application>
0 голосов
/ 13 февраля 2019

Я просто копаюсь по другой проблеме с уведомлением о поступлении сигнала и нашел этот вопрос. Я хотел бы ответить следующим образом:

какое значение вы задали для NotificationOpened.DEFAULT в манифесте.

«Включить» откроет ваше приложение.

<application>   <meta-data android:name="com.onesignal.NotificationOpened.DEFAULT" android:value="Enable" /></application>
...