OneSignal: no se puede abrir la actividad después de hacer clic en el botón

Lo estoy intentando. Puedo enviar algunos AdditionalData de empujar y redirigir el usuario a la actividad spesific pero no redirigir.

Por ejemplo, enviar un empuje contiene AdditionalData como imageID y redirigir la actividad ImageDetail del usuario con pasar el parámetro imageID a otra actividad.

Cuando hago clic en push, se abre la actividad principal y no pasa nada

Lo intenté pero no puedo tener éxito.

Cómo puedo arreglarlo

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();*/ } } 

}

Estos son los resultados logcat

  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 estoy cerca de terminar 🙂 He añadido estas líneas al método OnCreate y quiero mover mu push redireccionar lógica a OnCreate método de MainActivity. Pero ahora no puedo analizar 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 resultados

 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"}]}] 

De forma predeterminada, OneSignal abrirá la actividad del lanzador cuando se abra una notificación. En su caso, su Actividad de ImageDetail probablemente esté iniciando y entonces la actividad del lanzador se muestra sobre ella.

Deberá agregar com.onesignal.NotificationOpened.RECEIVE a un BroadcastReceiver para anular la acción predeterminada de abrir la Actividad del lanzador. Consulte la documentación de OneSignal sobre Cómo cambiar la acción abierta de una notificación para las entradas de manifiesto requeridas y más detalles. Su BroadcastReceiver no necesita ningún código para realizar ninguna acción ya que ya tiene una configuración de OneSignal.NotificationOpenedHandler en su clase de aplicación. El manifiesto y el receptor sólo necesitan estar presentes para anular el comportamiento predeterminado.

Creo que la mejor manera, añadir línea abajo en su actividad:

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

Sí, finalmente. Recibo la información de empuje y redirigir.

  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)); } } 
  • Uso de GoogleApiClient desde IntentService de Notificación Push para enviar datos a Android Wear
  • No se puede iniciar la aplicación de receptor com.parse.ParseBroadcastReceiver en Trigger.io
  • Android Push Notification, cuando la aplicación está cerrada Tengo un estilo diferente
  • Gestión de escenarios de Notificación de empuje en iOS y Android
  • Android, notificación Push mediante parse.com, inicia automáticamente la aplicación
  • notificaciones push de Google Chrome android
  • La intención del receptor de mensajes de la nube de Google no se inicia (devolución de llamada de intención de difusión: resultado = CANCELADO paraIntención)
  • Un servidor que envía notificaciones push a dispositivos Android e iOS
  • Notificación de la mensajería en la nube de Firebase Vibración
  • BroadcastReceiver no se llama cuando la pantalla está bloqueada en Android
  • ¿Por qué firebase push_token devuelve la lista negra?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.