2016-01-30 16 views
6

Tôi đang thử điều đó. Tôi gửi một số AdditionalData từ push và chuyển hướng người dùng đến hoạt động spesific nhưng không chuyển hướng.OneSignal - không thể mở hoạt động sau khi nhấn được bấm

Ví dụ: tôi gửi một tệp tin có chứa AdditionalData như imageID và chuyển hướng hoạt động ImageDetail của người dùng bằng cách truyền tham số imageID đến hoạt động khác.

Khi tôi nhấp vào đẩy, Hoạt động chính mở ra và không có gì xảy ra

Tôi đã thử nhưng không thể thành công.

Làm thế nào tôi có thể sửa chữa nó

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

}

Dưới đây là kết quả các 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 

EDIT: Hımm tôi gần kết thúc :) Tôi đã thêm những dòng này vào OnCreate phương pháp và tôi muốn di chuyển mu đẩy chuyển hướng logic để OnCreate phương pháp MainActivity. Nhưng bây giờ tôi không thể phân tích Bundle extras Ý định :)

 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 quả

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

Bạn có nhận được bất kỳ lỗi? Hãy thử đặt một bản ghi trước khi 'try' chặn trong' notificationOpened' để xem ngay cả khi nó đang được gọi. – Rohit5k2

+0

không phải lỗi. Vấn đề là phương thức onCreate được kích hoạt sau khi thông báoOpen() :( –

+0

Hmmmm i am gần để kết thúc :) Tôi đã thêm các dòng này vào phương thức OnCreate và tôi muốn di chuyển logic chuyển hướng mu tới phương thức OnCreate của MainActivity. Nhưng bây giờ tôi không thể phân tích cú pháp tính năng bổ sung của gói bổ sung :) –

Trả lời

2

Có cuối cùng. Tôi nhận được thông tin đẩy và chuyển hướng.

 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

Theo mặc định OneSignal sẽ mở Hoạt động phóng khi một thông báo được mở ra. Trong trường hợp của bạn, hoạt động ImageDetail của bạn có thể bắt đầu và sau đó Hoạt động trình khởi chạy đang được hiển thị trên đó.

Bạn sẽ cần thêm com.onesignal.NotificationOpened.RECEIVE vào BroadcastReceiver để ghi đè hành động mặc định của việc mở Hoạt động trình khởi chạy. Xem tài liệu của OneSignal trên Changing the open action of a notification cho các mục kê khai yêu cầu và biết thêm chi tiết. BroadcastReceiver của bạn không cần bất kỳ mã nào để thực hiện bất kỳ hành động nào khi bạn đã có thiết lập OneSignal.NotificationOpenedHandler trong lớp Ứng dụng của mình. Tệp kê khai và người nhận chỉ cần có mặt để ghi đè hành vi mặc định.

+0

tôi đã thay đổi mã của mình. tôi di chuyển lớp \t NotificationOpenedHandler của mình sang Active activiti. OK bây giờ khi tôi nhấn vào đẩy. Hoạt động chính đã được gọi. Nhưng vấn đề là lần đầu tiên thông báoMở chức năng được kích hoạt sau đó hoạt động onCreate. Vì vậy, mã Intent của tôi để tạo hoạt động mới không hoạt động: ( –

7

Tôi nghĩ rằng cách tốt hơn, thêm dòng dưới đây trong hoạt động của bạn:

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

Đúng, sử dụng NotificationExtenderService là một công việc phụ vô dụng cho mục đích của câu hỏi này. –

Các vấn đề liên quan