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)); } } 
  • Un servidor que envía notificaciones push a dispositivos Android e iOS
  • Appcelerator Titanium LocalNotification para Android
  • No se pueden recibir mensajes con Google Cloud Messaging para Android (no la biblioteca de ayuda)
  • Nuevo error de origen desconocido del registro de la API de GCM
  • Notificación lanza RemoteServiceException en el dispositivo de Motorola con OS 7
  • FCM devuelve error: NotRegistered después del primer mensaje
  • BroadcastReceiver no se llama cuando la pantalla está bloqueada en Android
  • La aplicación Ionic / Cordova no recibe notificación push en el fondo
  • GCM BroadcastReceiver setResultCode uso
  • El clic de Android en la notificación no abre la Actividad adjunta
  • Uso de GoogleApiClient desde IntentService de Notificación Push para enviar datos a Android Wear
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.