2

알림 클릭은 앱을 열고 알림 클릭을 수행 한 경우에만 지정된 작업을 시작합니다. 앱이 백그라운드에 있거나 실행 중이 아니고 알림 클릭이 수행되면 애플리케이션의 MainActivity가 열립니다. 즉, PendingIntent에서 지정된 활동을 여는 대신 앱이 정상적으로 열리는 것과 같습니다.앱이 백그라운드에서 실행 중/실행 중이 아닌 경우 알림에서 특정 작업을 열지 않음

유형에 따라 알림 클릭을 두 개의 다른 활동 (ApprovalDetailActivity 및 ConversationDetailActivity)으로 리디렉션하고 싶습니다.

푸시 알림에 FCM을 사용하고 있습니다. Manifest 파일과 FCMListener 파일을 여기에 붙여 넣습니다. 제발 도와주세요. MyFirebaseMessagingService.java에서

sendNotification에() 기능

private void sendNotification(String messageBody) 
    { 
     Intent intent; 
     System.out.println("----message body: " + messageBody); 
     if(notificationBundle.getCategory().equalsIgnoreCase(Master.KEY_PUSH_NOTIFICATION_CONVERSATION)) 
     { 
      intent = new Intent(this, ConversationDetailActivity.class); 
      /*Conversation conversation = Master.notificationBundle.getConversation(); 
      Master.conversationsList = new ArrayList<>(); 
      Master.conversationsList.add(conversation);*/ 
     } 
     else 
     { 
      intent = new Intent(this, ApprovalDetailActivity.class); 
      if(notificationBundle.getApprovalType().equals("I")) 
       intent.putExtra(Master.KEY_WHICH_APPROVAL, Master.KEY_VERIFICATIONS); 
      else if(notificationBundle.getApprovalType().equals("A")) 
       intent.putExtra(Master.KEY_WHICH_APPROVAL, Master.KEY_APPROVALS); 
      else 
       intent.putExtra(Master.KEY_WHICH_APPROVAL, Master.KEY_COMPLETED); 

      intent.putExtra(Master.KEY_IS_FROM_CONVERSATION, false); 
     } 

     intent.putExtra(Master.KEY_PUSH_NOTIFICATION_POST_ID , notificationBundle.getPostID()); 
     intent.putExtra(Master.KEY_IS_FROM_PUSH_NOTIFICATION, true); 
     intent.putExtra(Master.KEY_POSITION, 0); 

     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 
       PendingIntent.FLAG_ONE_SHOT); 

     Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
       .setSmallIcon(R.drawable.mnet_icon) 
       .setContentTitle(getString(R.string.app_name)) 
       .setContentText(messageBody) 
       .setAutoCancel(true) 
       .setSound(defaultSoundUri) 
       .setContentIntent(pendingIntent); 

     NotificationManager notificationManager = 
       (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

     int random = (int) ((new Date().getTime()/1000L) % Integer.MAX_VALUE); 
     notificationManager.notify(random, notificationBuilder.build()); 
    } 

의 AndroidManifest.xml 중포 기지 클라우드 메시징 문서-IF 활동 전경 다음 onMessageReceived이 전화를받을 것입니다 당으로

<?xml version="1.0" encoding="utf-8"?> 
<manifest 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    package="mnet.mediaware.com.m_net"> 

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

    <application 
     android:name=".MnetApplication" 
     android:allowBackup="true" 
     android:icon="@drawable/mnet_icon" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity 
      android:name=".activities.LoginActivity" 
      android:configChanges="orientation|keyboardHidden|screenSize" 
      android:label="@string/app_name" 
      android:launchMode="singleTask" 
      android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".activities.MainActivity" 
      android:configChanges="orientation|keyboardHidden|screenSize" 
      android:label="@string/title_activity_main" 
      android:launchMode="singleTask" 
      android:theme="@style/AppTheme.NoActionBar" /> 

     <activity 
      android:name=".activities.ConversationDetailActivity" 
      android:configChanges="orientation|keyboardHidden|screenSize" 
      android:label="@string/title_activity_conversation_detail" 
      android:parentActivityName=".activities.MainActivity" 
      android:theme="@style/AppTheme.NoActionBar" 
      android:launchMode="singleTask" 
      android:windowSoftInputMode="stateHidden|adjustResize"> 
      <intent-filter> 
       <action android:name="mnet.mediaware.com.m_net.activities.ConversationDetailActivity" /> 
       <action android:name="android.intent.action.VIEW" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <data android:scheme="http" /> 
      </intent-filter> 

      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="mnet.mediaware.com.m_net.activities.MainActivity" /> 
     </activity> 
     <activity 
      android:name=".activities.ApprovalDetailActivity" 
      android:configChanges="orientation|keyboardHidden|screenSize" 
      android:label="@string/title_activity_approval_detail" 
      android:parentActivityName=".activities.MainActivity" 
      android:theme="@style/AppTheme.NoActionBar" 
      android:windowSoftInputMode="stateHidden|adjustResize"> 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="mnet.mediaware.com.m_net.activities.MainActivity" /> 
     </activity> 
     <activity 
      android:name=".activities.NewConversationActivity" 
      android:configChanges="orientation|keyboardHidden|screenSize" 
      android:label="@string/title_activity_new_conversation" 
      android:parentActivityName=".activities.MainActivity" 
      android:theme="@style/AppTheme.NoActionBar" 
      android:windowSoftInputMode="stateHidden|adjustResize"> 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="mnet.mediaware.com.m_net.activities.MainActivity" /> 
     </activity> 
     <activity 
      android:name=".activities.NotificationActivity" 
      android:configChanges="orientation|keyboardHidden|screenSize" 
      android:label="@string/title_activity_notification" 
      android:parentActivityName=".activities.MainActivity" 
      android:theme="@style/AppTheme.NoActionBar" 
      android:windowSoftInputMode="stateHidden|adjustResize"> 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="mnet.mediaware.com.m_net.activities.MainActivity" /> 
     </activity> 
     <activity 
      android:name=".activities.ProfileActivity" 
      android:label="@string/title_activity_profile" 
      android:configChanges="orientation|keyboardHidden|screenSize" 
      android:parentActivityName=".activities.MainActivity" 
      android:theme="@style/AppTheme.NoActionBar"> 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="mnet.mediaware.com.m_net.activities.MainActivity" /> 
     </activity> 

     <service 
      android:name=".utils.firebase.MyFirebaseMessagingService"> 
      <intent-filter> 
       <action android:name="com.google.firebase.MESSAGING_EVENT"/> 
      </intent-filter> 
     </service> 

     <service 
      android:name=".utils.firebase.MyFirebaseInstanceIDService"> 
      <intent-filter> 
       <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> 
      </intent-filter> 
     </service> 

    </application> 

</manifest> 
+0

사용 –

+1

사용 플래그'PendingIntent.FLAG_UPDATE_CURRENT'이 활동에 당신을 토지 것 PendingIntent.FLAG_UPDATE_CURRENT. 코드 버디 유지;) hahaahaha – buzzingsilently

답변

3

. 활동이 백그라운드에 있거나 닫힌 경우 알림 센터에 앱 실행기 활동을위한 알림 메시지가 표시됩니다. For More information Check this link

+0

Launcher 활동 (LoginActivity)의 의도에는 추가 기능이 있습니다. 그러나이 액티비티 (FCM 엑스트라가있는 경우)에서 ConversationDetailActivity를 시작할 때 startActivity() 함수는 아무 작업도 수행하지 않습니다. 따라서 ConversationDetailActivity가 열리지 않습니다. 그 이유는 무엇일까요? – backslashN

+0

의도에이 플래그를 추가 했습니까? intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); –

+0

예 이것 역시 시도했지만 도움이되지 않았습니다. 이 문제에 대한 다른 질문을 올렸습니다. 여기에 대답하십시오 : [link] (http://stackoverflow.com/questions/40842313/startactivity-does-nothing-even-when-the-intent-is-specified-correctly) – backslashN

0

런처 활동의 의도에서 번들 (푸시 알림 데이터 페이로드 용)을 가져온 다음 특정 활동을 시작하십시오.

0

나는 정확한 답을 얻었습니다.

TaskStackBuilder Usage and Definition

위의 링크로 멋진 비디오를 간과하지 마십시오.

TaskStackBuilder taskStackBuilder = TaskStackBuilder.create(getContext()); 
taskStackBuilder.addNextIntentWithParentStack(intent); 
PendingIntent pendingIntent = taskStackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 
관련 문제