2016-12-02 11 views
2

私はthis guide次のGoogle Firebaseクラウドメッセージングサービス(FCM)のAndroidアプリ、FCMへの接続アプリケーションはAWS SNSからの通知を受けていない

を接続していると私はセットアップにthis answerにFCM & AWS SNSとの間の接続を追ってきました。

FCM consoleから送信されたメッセージは正常に受信できましたが、AWS SNS consoleでは送信できませんでした。

AWSに記録されたdelivery statusメッセージは、自分のデバイスに通知が表示されていない間に送信したすべてのメッセージに対してSUCCESSを示しました。

何が起こっているかを確認する方法はありますか?

+0

ここに同じです。そして、メッセージがどのようにいつどこに落ちているのかを知る場所はありません。クラウドウォッチのレポートには、送信したすべてのメッセージの成功が表示されますが、デバイスに配信されたものはありません。この人には答えがある人がいますか?私はFirebaseがここにあると思う。 –

答えて

1

ここでの問題は、AWS SNSがGoogleのデータ・メッセージを送信することです。

FCMでは、通知とデータという2種類のメッセージを送信できます。通知はFCMによって自動的に表示され、データメッセージは自動的に表示されません。 https://firebase.google.com/docs/cloud-messaging/concept-options

FirebaseMessagingServiceを拡張して、onMessageReceivedメソッドをオーバーライドすることによって、アプリがバックグラウンドであってもSNSからのデータメッセージを処理することができます。ここでは、この上の詳細:あなたのテキストを表示さアプリがバックグラウンドで

  • あるときにそれらがポップアップを参照してください

    ACHするに 引き出しから出てクリアしたメッセージのすべてをしたいアクティブに通知

  • でこれは3つのことをしたいと思うでしょう。

    最初に - あなたのアプリが現在可視であるかどうかを追跡したいと思うでしょう。確実にこれを検出する方法の詳細あなたがここで見つけることができます:https://stackoverflow.com/a/18469643/96911

    第二 - あなたが通知を掲載することにより、AWS SNSからのデータメッセージを処理したいと思うが、あなたのアプリがバックグラウンドで動作しているときにのみ:

    public class MyFirebaseMessagingService extends FirebaseMessagingService { 
    
        static protected int id = 0; 
    
        @Override 
        public void onMessageReceived(RemoteMessage remoteMessage) { 
         super.onMessageReceived(remoteMessage); 
    
         if (!MyApplication.isActivityVisible()) { 
          NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this); 
          mBuilder.setContentTitle(getString(R.string.app_name)) 
            .setSmallIcon(R.drawable.notification_icon); 
    
          String message = remoteMessage.getData().get("default"); 
          mBuilder.setContentText(message); 
    
          Intent resultIntent = new Intent(this, MainActivity.class); 
          PendingIntent resultPendingIntent = 
            PendingIntent.getActivity(
              this, 
              0, 
              resultIntent, 
              PendingIntent.FLAG_UPDATE_CURRENT 
            ); 
          mBuilder.setContentIntent(resultPendingIntent); 
    
          NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
    
          mNotificationManager.notify(id ++, mBuilder.build()); 
         } 
        } 
    
    } 
    

    最後に - ユーザーが1つをクリックしたときに、ドロワーからのすべての通知をクリアします。あなたがこの質問をしたが、私はに到達することはとても苦痛だったので、長い時間がかかった

    @Override 
    protected void onResume() { 
        super.onResume(); 
    
        MyApplication.activityResumed(); 
    
        NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
    
        mNotificationManager.cancelAll(); 
    } 
    

    :私はちょうど通知に応答アクティビティの上リンクされ、視認性の追跡と組み合わせることで、次のonResumeの方法を持っている必要があります私はとにかく答えることにしました。私はこれが、あなたや他の人が自分の髪の毛を裂いて、このことを働かせようとするのを助けてくれることを願っています。

  • 0

    以下のステップに従うAWS SNSコンソールからデータを取得するために:FCMにプロジェクトを追加し、AWS SNSのためのレガシーサーバーキーを使用)

    1。 )(

    String deviceToken = FirebaseInstanceId.getInstance().getToken(); 
    

    3)アプリケーション

    public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService { 
    
    @Override 
    public void onTokenRefresh() { 
    
        String refreshedToken = FirebaseInstanceId.getInstance().getToken(); 
        sendRegistrationToServer(refreshedToken); 
    } 
    
    private void sendRegistrationToServer(String token) { 
        // TODO: Implement this method to send token to your app server. 
    } 
    

    }

    4)onMessageReceivedをオーバーライドして以下のコードを実装:

    2)以下のコードを使用してデバイストークンを取得します通知が受け取られたときのその呼び出し:

    public class AppFirebaseMessagingService extends FirebaseMessagingService { 
    static protected int id = 0; 
    
    @Override 
    public void onMessageReceived(RemoteMessage remoteMessage) { 
    
        //remoteMessage.getNotification().getBody() 
    
    
        if (remoteMessage.getData().get("default").length() > 0) { 
           Intent intent = new Intent(this, MainActivity.class); 
         intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
         PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); 
         Uri ringNotificationSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
         NotificationCompat.Builder notifyBuilder = new NotificationCompat.Builder(this) 
           .setSmallIcon(R.mipmap.ic_launcher) 
           .setContentTitle("ApplicationName") 
           .setContentText(remoteMessage.getData().get("default")) 
           .setAutoCancel(true) 
           .setSound(ringNotificationSound) 
           .setContentIntent(pendingIntent); 
         NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
         notificationManager.notify(id++, notifyBuilder.build()); 
    
        } 
    } 
    

    }

    AWSから通知を受け取ると、AWSからのメッセージの読み取りにremoteMessage.getData().get("default")が使用されます。

    2

    このビデオチュートリアルhttps://youtu.be/iBTFLu30dSgを使用して、AWS SNSでFCMを使用する方法と、AWSコンソールからプッシュ通知を送信する方法の例を英語の字幕で表示することができます。それは私のためにうまく動作し、SNSコンソールとモバイルデバイスのコードからプッシュ通知を正常に受信しました

    関連する問題