2016-01-30 26 views
6

Ich versuche das. Ich sende einige AdditionalData von Push und Redirect Benutzer zu spezifischen Aktivität, aber nicht umleiten.OneSignal - kann die Aktivität nicht öffnen, nachdem ich geklickt habe

Zum Beispiel sende ich einen Push enthält AdditionalData wie imageID und Redirect Benutzer ImageDetail Aktivität mit Übergabe BildID Parameter an andere Aktivität.

Wenn ich Push klicken, Haupttätigkeit öffnet und es passiert nichts

Ich habe versucht, aber nicht erfolgreich sein kann.

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

}

Hier wird die logcat Ergebnisse

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 

eDIT: himm i in der Nähe bin fertig :) Ich habe diese Zeilen hinzugefügt OnCreate-Methode und ich möchte mu Push Redirect-Logik zu OnCreate-Methode von MainActivity verschieben. Aber jetzt kann ich nicht Bundle Intent Extras analysieren :)

 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 Ergebnisse

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

Sind Sie einen Fehler bekommen? Versuchen Sie, vor 'try' block in' notificationOpened' ein Protokoll anzulegen, um zu sehen, ob es gerade aufgerufen wird. – Rohit5k2

+0

nicht nicht fehler. Das Problem ist onCreate Methode wird nach der Benachrichtigung ausgelöstOpen() :( –

+0

Hımm ich bin kurz vor dem Abschluss :) Ich habe diese Zeilen OnCreate-Methode hinzugefügt, und ich möchte mu Push Redirect-Logik auf OnCreate-Methode von MainActivity verschieben. Aber jetzt kann ich Bundle Intent Extras nicht analysieren :) –

Antwort

2

Ja endlich. Ich bekomme die Push-Informationen und 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)); 
     } 

    } 
6

standardmäßig OneSignal wird das Start Aktivität öffnen, wenn eine Benachrichtigung geöffnet. In Ihrem Fall startet wahrscheinlich Ihre ImageDetail-Aktivität und dann wird die Launcher-Aktivität darüber angezeigt.

Sie müssen com.onesignal.NotificationOpened.RECEIVE zu einem BroadcastReceiver hinzufügen, um die Standardaktion des Öffnens der Launcher-Aktivität zu überschreiben. Informationen zu den erforderlichen Manifesteinträgen und weiteren Details finden Sie in der OneSignal-Dokumentation unter Changing the open action of a notification. Ihr BroadcastReceiver benötigt keinen Code, um eine Aktion auszuführen, da Sie in Ihrer Anwendungsklasse bereits ein OneSignal.NotificationOpenedHandler Setup eingerichtet haben. Das Manifest und der Empfänger müssen nur vorhanden sein, um das Standardverhalten zu überschreiben.

+0

ich habe meinen Code geändert. Ich verschiebe meine \t NotificationOpenedHandler-Klasse zu Main activiti. OK jetzt, wenn ich auf den Push tippe. Hauptaktivität wurde aufgerufen. Aber das Problem ist zuerst die notificationOpened-Funktion ausgelöst dann Aktivität onCreate. Also mein Absicht Code für neue Aktivität erstellen ist nicht funktionieren :( –

7

Ich denke, der beste Weg, Linie unten in Ihrer Aktivität hinzufügen:

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

Ja, mit einem NotificationExtenderService ist ein nutzloses Extra-Arbeit für den Zweck dieser Frage. Gute Antwort Mann :) –

Verwandte Themen