7

I am trying that. I send some AdditionalData from push and redirect user to spesific activity but not redirect.

For example i send a push contains AdditionalData like imageID and redirect user ImageDetail activity with passing imageID parameter to other activity.

When i click push, Main activity opens and nothing happens

I tried but cannot be succeed.

How can i fix it

public class MainActivity extends Activity {
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;

// nav drawer title
private CharSequence mDrawerTitle;

// used to store app title
private CharSequence mTitle;

// slide menu items
private String[] navMenuTitles;
private TypedArray navMenuIcons;

private ArrayList<NavDrawerItem> navDrawerItems;
private NavDrawerListAdapter adapter;
private static MainActivity mInstance;
private AccessToken facebookAccessToken;
private SessionManager session;
private String pushAdURL;
private boolean isAdActive =  false;
private boolean isQRActive = false;
private boolean isMaintenanceMode = false;
SharedPreferences sp ;
SharedPreferences.Editor editor;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    sp = PreferenceManager.getDefaultSharedPreferences(this);

    Log.e("MAIN", "Main activity has been called");

    session = new SessionManager(getApplicationContext());

    OneSignal.startInit(this)
            .setNotificationOpenedHandler(new NotificationHandler())
            .init();





public static synchronized MainActivity getInstance() {
    return mInstance;
}




private class NotificationHandler implements OneSignal.NotificationOpenedHandler {
    /**
     * Callback to implement in your app to handle when a notification is opened from the Android status bar or
     * a new one comes in while the app is running.
     * This method is located in this Application class as an example, you may have any class you wish implement NotificationOpenedHandler and define this method.
     *
     * @param message        The message string the user seen/should see in the Android status bar.
     * @param additionalData The additionalData key value pair section you entered in on onesignal.com.
     * @param isActive       Was the app in the foreground when the notification was received.
     */
    @Override
    public void notificationOpened(String message, JSONObject additionalData, boolean isActive) {
        Toast.makeText(getApplicationContext(), "Notification opened:" + message
                + "Addional: "+additionalData, Toast.LENGTH_SHORT).show();

        Log.d("MESAJ:","message: " +message + "AditionData: " +String.valueOf(additionalData));

        try{

            if (additionalData != null) {
                Log.d("MESAJ:","Additionaldata is not null");

                if (additionalData.has("action")) {

                    Log.d("MESAJ:", "Title " + additionalData.getString("title"));
                    Log.d("MESAJ:", "Additionaldata has action");
                    Log.d("MESAJ:", "Action is " + additionalData.getString("action"));
                    Log.d("MESAJ:", "Action id is " + additionalData.getString("id"));


                    if (additionalData.getString("action") == "openimage") {
                        Log.d("MESAJ:","Additionaldata action is openimage");

                        String pusedImageId = additionalData.getString("id");
                        Log.d("MESAJ:", "Additionaldata action is " + pusedImageId);

                        Intent intent = new Intent(getApplicationContext(), ImageDetail.class);
                        intent.putExtra("imageid", pusedImageId);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(intent);
                    } else if (additionalData.getString("action") == "openboard") {
                        Log.d("MESAJ:","Additionaldata action is openboard");

                        String pusedBoardId = additionalData.getString("id");

                        Log.d("MESAJ:","Additionaldata action is " +pusedBoardId);

                        Intent intent = new Intent(getApplicationContext(), BoardDetail.class);
                        intent.putExtra("boardid", pusedBoardId);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(intent);


                    }

                }
            }

        } catch (Throwable t) {
            t.printStackTrace();
        }

        /*try {
            if (additionalData != null) {
                if (additionalData.has("actionSelected"))
                    additionalMessage += "Pressed ButtonID: " + additionalData.getString("actionSelected");

                additionalMessage = message + "\nFull additionalData:\n" + additionalData.toString();
            }

            Log.d("OneSignalExample", "message:\n" + message + "\nadditionalMessage:\n" + additionalMessage);
        } catch (Throwable t) {
            t.printStackTrace();
        }
        android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(MainActivity.this);
        builder.setTitle("Bilgilendirme");
        builder.setMessage(message + String.valueOf(additionalData));
        builder.setPositiveButton("Tamam", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {

            }
        });
        android.app.AlertDialog alert = builder.create();
        alert.show();*/
    }
}

}

Here is the logcat results

    1-31 08:17:47.410 20682-20682/com.harmankaya.otokatalog D/MESAJ:: message: klAditionData: {"action":"openboard","id":"23123","title":"dsga"}
01-31 08:17:47.410 20682-20682/com.harmankaya.otokatalog D/MESAJ:: Additionaldata is not null
01-31 08:17:47.415 20682-20682/com.harmankaya.otokatalog D/MESAJ:: Title dsga
01-31 08:17:47.415 20682-20682/com.harmankaya.otokatalog D/MESAJ:: Additionaldata has action
01-31 08:17:47.415 20682-20682/com.harmankaya.otokatalog D/MESAJ:: Action is openboard
01-31 08:17:47.415 20682-20682/com.harmankaya.otokatalog D/MESAJ:: Action id is 23123
01-31 08:17:47.445 20682-20682/com.harmankaya.otokatalog D/OneSignal: curActivity is NOW: null
01-31 08:17:47.600 20682-20682/com.harmankaya.otokatalog V/BitmapFactory: DecodeImagePath(decodeResourceStream3) : res/drawable-xxhdpi-v4/sym_def_app_icon.png
01-31 08:17:47.610 20682-20682/com.harmankaya.otokatalog D/AbsListView: Get MotionRecognitionManager
01-31 08:17:47.615 20682-20682/com.harmankaya.otokatalog E/MAIN: Main activity has been called

EDİT:Hımm i am near to finish :) I've added these lines to OnCreate method and i want to move mu push redirect logic to OnCreate method of MainActivity. But now i can not parse Bundle Intent extras :)

        Intent intent = getIntent();
    Bundle bundle = intent.getExtras();
    Toast.makeText(getApplicationContext(), "Sonuç: " +bundle, Toast.LENGTH_SHORT).show();
    Log.d("mesaj", "Result: " + bundle);


    if (bundle != null) {
        try {
            //TODO Push redirect logic
            Log.d("mesaj","String bundle : "+bundle.getString("onesignal_data"));

        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            Log.d("PUSH",String.valueOf(e));
        }

    }

LOGCAT results

Sonuç: Bundle[{onesignal_data=[{"custom":"{\"a\":{\"action\":\"openboard\",\"id\":\"2345\"},\"i\":\"159c4c5d-37d2-45ec-ae90-6f103a4b8e83\"}","from":"111189706423","alert":"demopushbody","title":"demotitle","android.support.content.wakelockid":1,"collapse_key":"do_not_collapse"}]}]
Erhan H.
  • 520
  • 4
  • 14
  • 24
  • Are you getting any error? Try putting a log before `try` block in `notificationOpened` to see if even it is being called. – Rohit5k2 Jan 30 '16 at 18:45
  • not not error. The problem is onCreate method is fired after notificationOpen() :( – Erhan H. Jan 31 '16 at 06:26
  • Hımm i am near to finish :) I've added these lines to OnCreate method and i want to move mu push redirect logic to OnCreate method of MainActivity. But now i can not parse Bundle Intent extras :) – Erhan H. Jan 31 '16 at 11:09
  • http://stackoverflow.com/questions/32591449/android-unity-onesignal-where-to-place-the-sound-file/35111086?s=11|0.0000#35111086 – Erhan H. Feb 06 '16 at 22:40

3 Answers3

10

I think the better way, add line bellow in your activity:

<application ...>
   <meta-data android:name="com.onesignal.NotificationOpened.DEFAULT" android:value="DISABLE" />
</application>
Tunaki
  • 132,869
  • 46
  • 340
  • 423
dsouza
  • 101
  • 1
  • 2
5

By default OneSignal will open the launcher Activity when a notification is opened. In your case your ImageDetail Activity is probably starting and then the launcher Activity is being displayed over it.

You will need to add com.onesignal.NotificationOpened.RECEIVE to a BroadcastReceiver to override the default action of opening the launcher Activity. See OneSignal's documenation on Changing the open action of a notification for the required manifest entries and more details. Your BroadcastReceiver does not need any code to take any action as you already have a OneSignal.NotificationOpenedHandler setup in your Application class. The manifest and receiver just need to be present to override the default behavior.

jkasten
  • 3,899
  • 3
  • 32
  • 51
  • i changed my code. i move my NotificationOpenedHandler class to Main activiti. OK now when i tap the push. Main activity has been called. But the problem is first the notificationOpened function triggered then activity onCreate. So my Intent code for create new activity is not work :( – Erhan H. Jan 31 '16 at 06:18
2

Yes finally. I get the push information and redirect.

       Intent intent = getIntent();
    Bundle bundle = intent.getExtras();
    Log.d("mesaj", "Sonuç: " + bundle);


    if (bundle != null) {
        try {
            Log.d("mesaj", "String bundle : " + bundle.getString("onesignal_data"));

            String jsonData = bundle.getString("onesignal_data");
            Log.d("mesaj", "json: " + jsonData);

            if (jsonData != null) {
                JSONArray json = new JSONArray(jsonData);

                Log.d("mesaj", "json size: " + json.length());

                if (json.length() < 2) {

                    Log.d("mesaj", " siz < 2 json get0: " + json.get(0));

                } else {

                    for (int i = 1; i < json.length(); i++) {
                        object = json.getJSONObject(i);
                        Log.d("mesaj", "json details: " + object.getString("custom") + object.getString("alert"));
                        String obj = new JSONObject(object.getString("custom")).getString("a");
                        String action = new JSONObject(obj).getString("action");
                        String actionid = new JSONObject(obj).getString("id");

                        if (action.equals("openboard")) {
                            Intent intent2 = new Intent(MainActivity.this, BoardDetail.class);
                            intent2.putExtra("boardid", actionid);
                            intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            startActivity(intent2);
                        } else if (action.equals("openimage")) {
                            Intent intent2 = new Intent(MainActivity.this, ImageDetail.class);
                            intent2.putExtra("imageid", actionid);
                            intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            startActivity(intent2);
                        } else if (action.equals("openblog")) {
                            Intent intent2 = new Intent(MainActivity.this, BlogDetail.class);
                            intent2.putExtra("blogid", actionid);
                            intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            startActivity(intent2);
                        }
                    }

                }

            }
        } catch (JSONException e) {
            e.printStackTrace();
            Log.d("Push Exception : ", String.valueOf(e));
        }

    }
Erhan H.
  • 520
  • 4
  • 14
  • 24