OneSignal - cannot open activity after clicking

I am trying to do this. I send some additional data from push and redirects the user to spesific activity, but does not redirect.

For example, I send a push containing additional data, such as imageID, and redirect the ImageDetail user activity by passing the imageID parameter to other actions.

When I press the push button, the main activity opens and nothing happens

I tried, but cannot 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 are 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 close to finish :) I added these lines to the OnCreate method and I want to move the mu push redirection logic to the OnCreate MainActivity method. But now I can’t make out the Bundle Intent add-ons :)

  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"}]}] 
+6
source share
3 answers

Yes, finally. I receive 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)); } } 
+2
source

I think it's better to add a line to your activity:

 <application ...> <meta-data android:name="com.onesignal.NotificationOpened.DEFAULT" android:value="DISABLE" /> </application> 
+7
source

By default, OneSignal will open a launch action when a notification is opened. In your case, your ImageDetail activity probably starts, and then start activity is displayed above it.

You will need to add com.onesignal.NotificationOpened.RECEIVE to BroadcastReceiver in order to override the default action that opens the Launcher action. See OneSignal Documentation for Changing the Open Notification Action for the required manifest entries and more details. Your BroadcastReceiver does not need any code to take any action since you already have the OneSignal.NotificationOpenedHandler setting in your Application class. The metric and recipient simply must be present to override the default behavior.

+6
source

All Articles