2016-10-05 7 views
1

내 프로젝트에 PushWoosh을 통합했습니다. 그리고 사용자가 알림을 탭하면 해당 활동을 열어야합니다. 푸시가 수신되면 데이터를 가져와 (ID라고 가정 해 봅니다) 인 텐트를 사용하여이 ID를 보내고 내 활동을 열어야합니다. 그래서 Factory (사용자 지정 푸시 알림 용)를 만들고 GenerateNotification() 콜백에 알림을 만들었습니다. 그러나 보류 의도를 설정하고이 알림을 클릭하면 내 주요 활동이 열립니다. 나는 마침내를푸시 워시 알림 클릭으로 액티비티를 여는 것이 안드로이드에서 작동하지 않는 이유는 무엇입니까?

notificationManager.notify(uniqueId, notification); 
    return null; 

답변

1

를 넣어 경우

public class MyFactory extends AbsNotificationFactory { 
     private String id; 

     @Override 
     public Notification onGenerateNotification(PushData pushData) { 
      final String notificationTitle = "Title"; 

      id = pushData.getExtras().getString("Id"); 

      final Intent pushIntent = new Intent(getContext().getApplicationContext(), PushActivity.class); 
      pushIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
      pushIntent.putExtra("Id", id); 

      final int uniqueId = Math.abs(UUID.randomUUID().hashCode()); 

      PendingIntent pendingIntent = PendingIntent.getActivity 
        (getContext(), uniqueId, pushIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

      NotificationCompat.BigTextStyle bigTextStyle = new NotificationCompat.BigTextStyle(); 
      bigTextStyle.setBigContentTitle(notificationTitle); 
      bigTextStyle.bigText(notificationAlert); 

      final NotificationCompat.Builder builder = new NotificationCompat.Builder(getContext()) 
       .setSmallIcon(R.drawable.app_icon) 
       .setContentTitle(notificationTitle) 
       .setDefaults(Notification.DEFAULT_SOUND) 
       .setContentIntent(pendingIntent) 
       .setContentText(notificationAlert) 
       .setStyle(bigTextStyle); 

      final Notification notification = builder.build(); 
      final NotificationManager notificationManager = (NotificationManager) getContext().getSystemService(Context.NOTIFICATION_SERVICE); 
      //notificationManager.notify(uniqueId, notification); 
      notification.flags |= Notification.FLAG_AUTO_CANCEL; 

      return notification; 
     } 

     @Override 
     public void onPushReceived(PushData pushData) { 
     } 

     @Override 
     public void onPushHandle(Activity activity) { 
     } 
    } 

그러나 재 작동, 나는 해결책을 찾아 냈다. 우리가 BroadcastRecevier을 만들고이

public class PushNotificationReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent incomingIntent) { 
     if (incomingIntent == null) 
      return; 

     // Get data here if need 
     // From incomingIntent and PushBundle 

     Intent intent = new Intent(context,PushReceiverActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(intent); 

     //Let Pushwoosh SDK post-handle push (track stats, etc.) 
     PushManagerImpl.postHandlePush(context, incomingIntent); 

    } 
} 

에서 활동을 시작하는 데 필요한 그리고 매니페스트

<receiver android:name=".PushNotificationReceiver" /> 

     <meta-data 
      android:name="PW_NOTIFICATION_RECEIVER" 
      android:value="com.example.test.pushwooshtest.PushNotificationReceiver" /> 
에 추가하는 것을 잊지 마세요 통지를 탭을 통해 사용자 활동을 열기 위해