아반떼오우너의 개발블로그 ㅋㅋ

iOS Firebase기반 푸시 서비스 사용해보기 본문

iOS

iOS Firebase기반 푸시 서비스 사용해보기

Avante 2022. 2. 7. 14:41

나는 지금까지 푸시서비스를 직접 만들어본적이 없었다.

회사에서 이미 구현되어있는 푸시서비스를 유지/보수 하는 일만 해봤을뿐 처음부터 만들어본적이 없었다.

그래서 이번에는 푸시서비스를 직접 내 개인앱에 올려보려고 한다.

이미 유지/보수를 통해 어떤 절차를 통해 동작되는지는 알지만 자세히는 모르기때문에 이번기회에 정리해보고자 한다.

 

먼저 애플 디벨로퍼 사이트에 접속 및 인증서창으로 이동해준다.

위와 같은 화면에서 Create a Key를 눌러 푸시 키를 생성해주도록 한다.

Key Name에 적당한 이름을 지어주고, Apple Push Notifications Service(APNs)를 Enable 시켜주고 우상단의 Continue를 눌러준다.

다음으로 넘어가면 아래 화면에서 Key ID가 적혀있는데 이걸 잘 기억해두자.

그리고 좌상단의 Download를 눌러 푸시 인증키를 다운받도록 하는데 이때 확장자가 .p8인지 확인한다.

 

 

여기까지 했으면 다시 인증서탭으로 이동하여 좌측의 메뉴에서 Identifiers를 클릭하고

인증서 리스트중 원하는 앱의 인증서를 선택하여 하단의 Capabilities중 Push Notifications를 선택하여 Save해주도록 한다.

이때 TeamID도 같이 기억해놓도록 한다.

나는 .p8인증키를 사용할것이기 때문에 여기서 configure를 선택하여 인증서를 생성 및 적용할 필요는 없다.

(*)만약 푸시를 적용하려는 앱의 Xcode프로젝트에서 Auto Manage Signing을 사용중이라면 상관없지만

프로비저닝을 직접 로컬에 받아 사용하는 경우 Push Notification이 추가되었으므로 프로비저닝을 새로 만들어 사용해야한다.

 

 

여기까지가 애플 디벨로퍼 사이트에서 할일이고, 이제 Firebase로 이동하여 연동작업을 해줘야한다.

 

 

이제 파이어베이스 콘솔로 이동하고

프로젝트 설정에서 클라우드 메시징으로 이동 및 업로드 버튼을 누르도록 한다.

 

그리고 아까 기억해놓았던 TeamID와 Key ID, 그리고 .p8인증서를 업로드 하도록 한다.

그러면 이제 파이어베이스에서 할작업도 모두 종료되었다.

 

이제 앱 프로젝트로 이동하여 남은 작업을 해주면 된다.

 

먼저 아래와 같이 Signing & Capabilities로 이동하고 빨간박스의 Capability를 클릭하여

Push Notification을 선택하면 Capability에 Push Notifications이 추가된것을 확인할수있다.

만약 Auto Manage signing을 사용하지않고 위의 절차에서 프로비저닝을 새로 설정해주지 않았다면

이부분에서 인증서 오류가 날것이다.

만약 인증서 오류가 난다면 애플 디벨로퍼 사이트로 이동하여 Push Notification이 추가되어있는 프로비저닝을 새로만들어 로컬에 적용해준다.

 

그 다음 CocoaPods내에 Firebase관련값들을 넣어줘야한다.

위와 같이 넣어줬는데 세번째의 Firebase/Messaging을 넣어주면된다.

그리고 AppDelegate.swift내에서 아래와같은 코드를 입력해주도록 한다.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
  // 이미 구현된 코드들아래에 추가.
  FirebaseApp.configure()
  
  UNUserNotificationCenter.current().delegate = self
  Messaging.messaging().delegate = self
  let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
  UNUserNotificationCenter
    .current()
    .requestAuthorization(
      options: authOptions,completionHandler: { (_, _) in }
    )
  application.registerForRemoteNotifications()
  
  return true
}
  
extension AppDelegate: MessagingDelegate {
  func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
    print("파이어베이스 토큰: \(fcmToken)")
  }
}

extension AppDelegate: UNUserNotificationCenterDelegate {
  func userNotificationCenter(_ center: UNUserNotificationCenter,willPresent notification: UNNotification,withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    completionHandler([.alert, .badge, .sound])
  }
  
  func userNotificationCenter(_ center: UNUserNotificationCenter,didReceive response: UNNotificationResponse,withCompletionHandler completionHandler: @escaping () -> Void) {
    completionHandler()
  }
}

 

 

위와같이 작성하면 앱에서의 작업도 모두 완료되었다.

 

이제 테스트를 위해 앱을 실행시키면 MessaingDelegate를 상속받은 messaging메서드의 로그가 찍힐텐데

해당값이 현재 기기의 FCM토큰값이다.

이값을 잘 저장해놓은 후 다시 파이어베이스 콘솔로 한다.

위와같은 메뉴를 찾아 Cloud Messaging으로 이동하면 아래와 같은 화면이 나오는데 

절대 절대 절대 다음을 눌러 넘어가지 말고 우측의 테스트 메시지 전송을 누르도록 한다.

별 생각없이 다음다음다음을 눌러서 전송되면 해당 기기를 설치한 모든 유저에게 테스트 푸시가 전송된다.

 

그 후에 아래와같은 화면에서 아까 확인했던 FCM토큰을 등록하고 테스트 버튼을 누르면 해당 기기에 해당 앱 푸시가 들어오는것을 확인할 수있다.