수색…


소개

FCM (Firebase Cloud Messaging)은 비용없이 안정적으로 메시지를 전달할 수있는 교차 플랫폼 메시징 솔루션입니다.

FCM을 사용하면 새로운 이메일이나 다른 데이터를 동기화 할 수 있음을 클라이언트 응용 프로그램에 알릴 수 있습니다. 사용자에게 다시 보류 및 보류하도록 알림 메시지를 보낼 수 있습니다. 인스턴트 메시징과 같은 사용 사례의 경우 메시지는 최대 4KB 의 페이로드를 클라이언트 응용 프로그램으로 전송할 수 있습니다.

Android에 Firebase 클라우드 메시징 클라이언트 앱 설정

  1. 앱을 Firebase에 연결하려면 설치 및 설정 부분 을 완료하십시오.
    그러면 Firebase에 프로젝트가 생성됩니다.

  2. Firebase Cloud Messaging에 대한 종속성을 모듈 수준 build.gradle 파일에 build.gradle 합니다.

dependencies {
     compile 'com.google.firebase:firebase-messaging:10.2.1'
}

이제 Android에서 FCM을 사용할 준비가되었습니다.

FCM 클라이언트에는 Google Play 스토어 앱이 설치된 Android 2.3 이상을 실행하는 기기 또는 Google API가 포함 된 Android 2.3을 실행하는 에뮬레이터가 필요합니다.

AndroidManifest.xml 파일 수정

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

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

등록 토큰

앱을 처음 시작할 때 FCM SDK는 클라이언트 앱 인스턴스에 대한 등록 토큰을 생성합니다.
단일 장치를 대상으로하거나 장치 그룹을 만들려면 FirebaseInstanceIdService 를 확장하여이 토큰에 액세스해야합니다.

새로운 토큰이 생성 될 때마다 onTokenRefresh 콜백이 발생하고 FirebaseInstanceID.getToken() 메서드를 사용하여 현재 토큰을 검색 할 수 있습니다.

예:

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {

   /**
     * Called if InstanceID token is updated. This may occur if the security of
     * the previous token had been compromised. Note that this is called when the InstanceID token
     * is initially generated so this is where you would retrieve the token.
     */

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

    }

}

이 코드는 이미지, 메시지 및 웹보기를 여는 데 필요한 링크를 푸시하기 위해 앱에서 구현 한 코드입니다.

이것은 내 FirebaseMessagingService입니다.

    public class MyFirebaseMessagingService extends FirebaseMessagingService { 
Bitmap bitmap;
@Override 
public void onMessageReceived(RemoteMessage remoteMessage) {
    String message = remoteMessage.getData().get("message");
    //imageUri will contain URL of the image to be displayed with Notification 
    String imageUri = remoteMessage.getData().get("image");
    String link=remoteMessage.getData().get("link");
 
    //To get a Bitmap image from the URL received 
    bitmap = getBitmapfromUrl(imageUri);
    sendNotification(message, bitmap,link);
 
} 
 
 
/** 
 * Create and show a simple notification containing the received FCM message. 
 */ 
 
private void sendNotification(String messageBody, Bitmap image, String link) {
    Intent intent = new Intent(this, NewsListActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("LINK",link);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
            PendingIntent.FLAG_ONE_SHOT);
    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
            .setLargeIcon(image)/*Notification icon image*/
            .setSmallIcon(R.drawable.hindi)
            .setContentTitle(messageBody)
            .setStyle(new NotificationCompat.BigPictureStyle()
                    .bigPicture(image))/*Notification with Image*/
            .setAutoCancel(true) 
            .setSound(defaultSoundUri)
            .setContentIntent(pendingIntent);
    NotificationManager notificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
 
    notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
} 
public Bitmap getBitmapfromUrl(String imageUrl) {
    try { 
        URL url = new URL(imageUrl);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoInput(true);
        connection.connect();
        InputStream input = connection.getInputStream();
        Bitmap bitmap = BitmapFactory.decodeStream(input);
        return bitmap;
 
    } catch (Exception e) {
        // TODO Auto-generated catch block 
        e.printStackTrace();
        return null; 
 
    } 
}} 

그리고 MainActivity는 내 WebView 또는 다른 브라우저에서 인 텐트를 통해 사용자 요구 사항에 대한 링크를 엽니 다.

if (getIntent().getExtras() != null) {
    if (getIntent().getStringExtra("LINK")!=null) {
        Intent i=new Intent(this,BrowserActivity.class);
        i.putExtra("link",getIntent().getStringExtra("LINK"));
        i.putExtra("PUSH","yes");
        NewsListActivity.this.startActivity(i);
        finish();
    }} 

메시지 수신

메시지를 수신하려면 FirebaseMessagingService 를 확장하고 onMessageReceived 메소드를 재정의하는 서비스를 사용하십시오.

public class MyFcmListenerService extends FirebaseMessagingService {
    
    /**
     * Called when message is received.
     *
     * @param remoteMessage Object representing the message received from Firebase Cloud Messaging.
     */
    @Override
    public void onMessageReceived(RemoteMessage message) {
        String from = message.getFrom();

        // Check if message contains a data payload.
        if (remoteMessage.getData().size() > 0) {
            Log.d(TAG, "Message data payload: " + remoteMessage.getData());
            Map<String, String> data = message.getData();
        }

        // Check if message contains a notification payload.
        if (remoteMessage.getNotification() != null) {
            Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
        }

        //.....
    }

앱이 백그라운드에있을 때 Android는 알림 메시지를 시스템 트레이로 보냅니다. 사용자가 알림을 탭하면 기본적으로 앱 실행기가 열립니다.

여기에는 알림 및 데이터 페이로드 (및 알림 콘솔에서 보낸 모든 메시지)가 포함 된 메시지가 포함됩니다. 이러한 경우 알림은 장치의 시스템 트레이로 전달되며 데이터 페이로드는 실행기 작업의 의도에 따라 추가로 제공됩니다.

다음은 간단한 요약입니다.

앱 상태 공고 데이터 양자 모두
전경 onMessageReceived onMessageReceived onMessageReceived
배경 시스템 트레이 onMessageReceived 알림 : 시스템 트레이
데이터 : 의도 외의 범위.

주제 구독

클라이언트 앱은 기존 주제를 구독하거나 새로운 주제를 만들 수 있습니다. 클라이언트 응용 프로그램이 새 주제 이름에 등록하면 해당 이름의 새 주제가 FCM에서 작성되고 모든 클라이언트가이 주제에 등록 할 수 있습니다.

토픽에 가입하려면 토픽 이름을 지정하는 subscribeToTopic() 메서드를 사용한다.

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


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow