Front/React Native

[ReactNative] FCM Android Head Up Push Alarm (react-native-firebase/messaging) 특정 유저에게 푸쉬알람 보내기

안드로이드 푸쉬 알람..

Expo로 개발할 땐 expo-notifications을 사용해서 푸쉬알람을 했다.

그땐 분명 잘 된거야..

안드로이드 헤드업 푸쉬알람 (알람이 위에 뜨는 것)

cli로 바꾸고, 헤드업 알람이 안되기 시작했다.

씨게 고통을 받았다. 씨게..

react-native-firebase/messaging 을 사용하면서
셋팅 다 했는데, 안드로이드에서 헤드업 알람이 안되는 나같은 사람들을 위해 글을 남긴다..

결론적으로
자바단을 작업해줘야한다.
FCM API은 head-up을 아직 지원안한다는 말을 들었고 (2020년 기준)
nodejs에서 firebase-admin도 지원안한다는 결과를 얻었다.

진짜 별별짓을 다했는데..

여기서 해결했다...ㅠ 슨상님...

 

Android Heads up Notification ( Notification Channel ) · Issue #2791 · invertase/react-native-firebase

I am using RNF v6 and all notifications are sent from Firebase Cloud functions. Its all good and notifications are received on Android, but i would need to get heads up notifications working on And...

github.com


MainActivity.java를 수정해줘야한다..

import com.facebook.react.ReactActivity;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.os.Build;
import android.os.Bundle;

public class MainActivity extends ReactActivity {
   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {    
            NotificationChannel notificationChannel = new NotificationChannel("500", "MainChannel", NotificationManager.IMPORTANCE_HIGH);
            notificationChannel.setShowBadge(true);
            notificationChannel.setDescription("Test Notifications");
            notificationChannel.enableVibration(true);
            notificationChannel.enableLights(true);
            notificationChannel.setVibrationPattern(new long[]{400, 200, 400});
            //notificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
            NotificationManager manager = getSystemService(NotificationManager.class);
            manager.createNotificationChannel(notificationChannel);
        }
  }

....

셋팅 해주면
이렇게 헤드업 알람으로 오게된다.

채널id가 필수로 있어야 헤드업이 된다. 500으로 설정했으니,
백단(nodejs)에서 보낼 때도 500으로 맞춰줬다.

  try {
    let { target_token } = req.body;
    const message = {
      notification: {
        title: 'noti-title',
        body: 'noti-body',
      },
      data: {
        id: 'id',
        title: 'data-title',
        body: 'data-body',
        origin: 'chat',
      },
      android: {
        priority: 'high',
        notification: {
          title: '안드 타이틀',
          body: '안드 메시지',
          sound: 'default',
          priority: 'high',
          icon: 'default',
          channelId: '500',
        },
      },
      token: target_token,
    };

    admins
      .messaging()
      .send(message)
      .then(function (response) {
        console.log('Successfully sent message: : ', response);
      })
      .catch(function (err) {
        console.log('Error Sending message!!! : ', err);
      });

    return res.status(200).json({ msg: 'success' });
  } catch (err) {
    console.log(err);
    return res.status(400).json({ msg: 'fail' });
  }
};

 

아이콘이나 기타 설정은 fcm 기타 설정등을 참고하자.