2016-01-30 15 views
6

मैं कोशिश कर रहा हूं। मैं पुश से कुछ अतिरिक्त डेटा भेजता हूं और उपयोगकर्ता को स्पेशिफिक गतिविधि पर रीडायरेक्ट करता हूं लेकिन रीडायरेक्ट नहीं करता हूं।OneSignal - धक्का के बाद गतिविधि को नहीं खोल सकता

उदाहरण के लिए मैं एक पुश भेजता हूं जिसमें छवि आईडी की तरह अतिरिक्त डेटा शामिल है और अन्य गतिविधि के लिए छवि आईडी पैरामीटर पास करने के साथ उपयोगकर्ता छविचित्र गतिविधि को रीडायरेक्ट करता है।

जब मैं धक्का क्लिक करें, मुख्य गतिविधि को खोलता है और कुछ नहीं होता

मैंने कोशिश की लेकिन नहीं सफल हो जा सकता है।

मैं इसे logcat परिणाम

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

}

यहाँ है

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 

संपादित कैसे तय कर सकते हैं: Himm मैं खत्म करने के लिए पास कर रहा हूँ :) मैं करने के लिए इन पंक्तियों को जोड़ दिया है ऑनक्रेट विधि और मैं मुख्य पुष्टिकरण की ऑनक्रेट विधि पर एमयू पुश रीडायरेक्ट तर्क को स्थानांतरित करना चाहता हूं। लेकिन अब मैं बंडल आशय अतिरिक्त पार्स नहीं कर सकता :)

 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

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

क्या आपको कोई त्रुटि हो रही है? 'अधिसूचना ओपन' में 'try' block' से पहले एक लॉग डालने का प्रयास करें, यह देखने के लिए कि यहां तक ​​कि इसे भी कहा जा रहा है या नहीं। – Rohit5k2

+0

त्रुटि नहीं है। समस्या यह है कि अधिसूचना के बाद क्रेट विधि निकाल दी गई है() :( –

+0

हिम मैं खत्म करने के करीब हूं :) मैंने इन लाइनों को ऑनक्रेट विधि में जोड़ा है और मैं मुख्य पुष्टिकरण की ऑनक्रेट विधि पर एमयू पुश रीडायरेक्ट तर्क को स्थानांतरित करना चाहता हूं। लेकिन अब मैं बंडल इरादा अतिरिक्त का विश्लेषण नहीं कर सकता :) –

उत्तर

2

हां अंत में। मुझे पुश जानकारी और रीडायरेक्ट मिलता है।

 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

परिणाम डिफ़ॉल्ट OneSignal तक करने पर एक सूचना खोला है लांचर गतिविधि खुल जाएगा। आपके मामले में आपकी छविचित्र गतिविधि शायद शुरू हो रही है और फिर लॉन्चर गतिविधि उस पर प्रदर्शित की जा रही है।

लॉन्चर गतिविधि खोलने की डिफ़ॉल्ट कार्रवाई को ओवरराइड करने के लिए आपको ब्रॉडकास्ट रिसीवर में com.onesignal.NotificationOpened.RECEIVE जोड़ने की आवश्यकता होगी। आवश्यक मैनिफेस्ट प्रविष्टियों और अधिक जानकारी के लिए Changing the open action of a notification पर OneSignal का डॉक्यूमेनेशन देखें। आपके ब्रॉडकास्ट रिसीवर को किसी भी कार्रवाई के लिए किसी भी कोड की आवश्यकता नहीं है क्योंकि आपके पास पहले से ही आपके एप्लिकेशन क्लास में OneSignal.NotificationOpenedHandler सेटअप है। मेनिफेस्ट और रिसीवर को डिफ़ॉल्ट व्यवहार को ओवरराइड करने के लिए बस उपस्थित होना आवश्यक है।

+0

मैंने अपना कोड बदल दिया। मैं अपने \t अधिसूचना ओपनेड हैंडलर क्लास को मुख्य सक्रियता में ले जाता हूं। ठीक है अब जब मैं पुश टैप करता हूं। मुख्य गतिविधि को बुलाया गया है। लेकिन समस्या सबसे पहले अधिसूचना ओपन किए गए फ़ंक्शन को फिर से चालू करने पर गतिविधि शुरू हुई। तो नई गतिविधि बनाने के लिए मेरा इरादा कोड काम नहीं करता है :( –

7

मुझे लगता है कि बेहतर तरीका, अपनी गतिविधि में लाइन bellow जोड़ें:

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

हाँ, अधिसूचना एक्स्टेंडर सेवा का उपयोग करके इस प्रश्न के उद्देश्य के लिए एक बेकार अतिरिक्त काम है। अच्छा उत्तर आदमी :) –

संबंधित मुद्दे