3

私のアプリでFirebaseを通じてプッシュ通知を実装しました。通知は設定から​​通知が無効になっている場合でも行われます。私はFirebaseのために実施している クラスは次のとおりです。アプリケーション設定からトグルボタンでFCMプッシュ通知を有効または無効にする

public class MyFirebaseMessagingService extends FirebaseMessagingService { 

      private static final String TAG = "MyFirebaseMsgService"; 
      @Override 
      public void onMessageReceived(RemoteMessage remoteMessage) { 

       //Displaying data in log 

       Log.e(TAG, "Notification Message Body: " + remoteMessage.getNotification().getBody()); 
       //Calling method to generate notification 

       String to=""; 
       to = remoteMessage.getData().get("key1"); 

     //when the notification is disabled then also the notification is coming 
    if(notification_enable) { 
    sendNotification(remoteMessage.getNotification().getTitle(),remoteMessage.getNotification().getBody(),to); 
      } 
     } 

      //This method is only generating push notification 
      //It is same as we did in earlier posts 
      private void sendNotification(String title,String messageBody,String to) { 
        Intent intent = new Intent(this, Splash_Activity.class); 
        intent.putExtra("key1",to); 
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_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.noti_icon) 
         .setContentTitle(title) 
         .setStyle(new NotificationCompat.BigTextStyle().bigText(messageBody)) 
         .setContentText(messageBody) 
         .setAutoCancel(true) 
         .setColor(this.getResources().getColor(R.color.colorAccent)) 
         .setSound(defaultSoundUri) 
         .setContentIntent(pendingIntent); 

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

       notificationManager.notify(0, notificationBuilder.build()); 
      } 
     } 
public class FirebaseIDService extends FirebaseInstanceIdService { 
    private static final String TAG = "FirebaseIDService"; 

    @Override 
    public void onTokenRefresh() { 
     // Get updated InstanceID token. 
     String refreshedToken = FirebaseInstanceId.getInstance().getToken(); 
     Log.e(TAG, "Refreshed token: " + refreshedToken); 

     // TODO: Implement this method to send any registration to your app's servers. 
     sendRegistrationToServer(refreshedToken); 
    } 

    /** 
    * Persist token to third-party servers. 
    * 
    * Modify this method to associate the user's FCM InstanceID token with any server-side account 
    * maintained by your application. 
    * 
    * @param token The new token. 
    */ 
    private void sendRegistrationToServer(String token) { 
     // Add custom implementation, as needed. 
    } 
} 

としてマニフェストのクラスが含まれていました。

<permission 
     android:name="com.pixelpoint.permission.C2D_MESSAGE" 
     android:protectionLevel="signature" /> 

    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
    <uses-permission android:name="com.pixelpoint.permission.C2D_MESSAGE" /> 

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

答えて

4

あなたがFirebaseコンソールを使用して通知を送信していますか? アプリがバックグラウンドにあり、MyFirebaseMessagingServiceがコールバックを受け取らない場合、これらの通知はシステムによって処理されます。ユーザーがローカル設定で通知を受信するために登録されているかどうかをクライアント側で確認するコードは、すべてのケースで機能しません。

FirebaseMessaging.getInstance().subscribeToTopic("news"); 

次に、ユーザが通知を切り替えるとき:このために(ここではhttps://firebase.google.com/docs/cloud-messaging/android/receiveバックグラウンド処理の詳細)

私の提案は、トピックを作成して、自動的にまっすぐにユーザーを登録した後、そのトピックにユーザーをサブスクライブすることですをオフにして、それらのトピックからの登録を解除します。

これにより、サーバーのリストから削除され、不要な通知を除外するクライアント側のロジックに頼ることはありません。

Firebox Consoleからクライアントに通知を送信するときは、はそのトピックに登録されているユーザのみを対象にしてください。ここでのトピックメッセージングに関する

もっと - ? https://firebase.google.com/docs/cloud-messaging/android/topic-messaging

+0

これは、それが義務付けられていないか(「ニュース」)は何か? – user6789978

+0

@ user6789978私が使用しているサンプルトピックは、アプリケーションに関連するトピック名を使用できます。 – riggaroo

関連する問題