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.
- Analizar: enviar notificaciones push desde la aplicación
- Cómo mostrar las notificaciones Heads up android
- Parse Push - Cómo abrir automáticamente una actividad sin la acción del usuario al recibir un empujón en Android
- ¿Las notificaciones no siempre se reciben por teléfono?
- La aplicación se bloquea si la aplicación se cierra mediante el servicio Push: parse.com
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"}]}]
- ¿Cómo puedo ver los errores en console.developers.google.com?
- Spring pedalea cliente web sockets para android
- Android: administrar múltiples notificaciones push en el dispositivo de una aplicación
- Activación inteligente "androide" desde una notificación push
- Implementación de la notificación push del servidor
- GCM BroadcastReceiver setResultCode uso
- Productos de Android Gradle con notificaciones de Parse Push
- ¿Hay alguna razón para continuar usando IntentService para manejar mensajes de GCM?
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)); } }
- Sugerencia que no se muestra Cuando numeric = "entero" en EditText
- Cómo obtener la dirección IP de un android móvil programatically …?