react-native-firebase의 FCM이 iOS 생산 환경에서 알림을 받지 못했을 때 하는 일

제목에서 보듯이 React Native의 이야기인 것 같지만 기본적으로 iOS의 이야기입니다.
나의 경우 아래 개발 환경에서 생산 환경만 발표한 후에는 도착할 수 없다.
개발 환경
  • React Native v0.57.0
  • react-native-firebase v4.3.8
  • 추식 통지증서 이용 p12 파일
  • 개발용은 개인 계정, 발표용은 회사가 준비한 것(회사의 애플 개발자 권한이 없는 상태)
  • 개발용 개인 계정 Auto Signing
  • 발급은 받은 프로필
  • 을 사용합니다.
  • Firebase에도 개발 및 발표에 사용되는 프로젝트가 있음
  • 개발용은 AdHoc(Sandbox)이기 때문에 문제없음
  • 전달이 안 되는 현상은 무엇입니까?
  • 백그라운드에서 아무도 센터에 알리지 않았다
  • Foreground에서 통지를 받았을 때 GUI에서 조치를 취했지만 아무 일도 없었다
  • 도달할 수 없는 타이밍


    발표 전 어느 단계에서 발표판은 Testflight를 통해 받았다.
    그곳에서 특별히 실현에 있어서 무엇을 한 것은 아니지만, 설정 파일의 업데이트가 정해진 시간에 발표된 후에 왔다.그 전의 응용 프로그램에서 알림을 특별히 명확하게 재생하지 않아서 눈치채지 못했다.
    인증서가 업데이트될 때 TestFlight를 통해 발표되며 FCM 콘솔에서 테스트 배포를 시도해도 도달할 수 없습니다.
    여기서부터 싸우자.

    원인을 탐색하다



    참조: Sending FCM notifications without App Server
    위에서 인용한 원본 이미지와 같이 FCM은 응용 프로그램에서 FCM API를 두드려 FCM Token을 가져옵니다.나는 원인의 구분을 했다.아마 원인이 될 것 같습니다.
  • FCM 측 질문
  • Xcode 질문
  • APNs 질문
  • 구현 문제
  • 우선, 저는 인증서 주위의 상황을 의심하고 다시 쓰기 시작했습니다. FCM 컨트롤러에서 테스트 알림을 해도 순조롭지 않아서 하나하나 문제를 탐색하기로 했습니다.

    FCM 관련 질문


    컬로 알림을 쳐서 결과를 찾아볼게요.

    curl -X POST --header "Authorization: key=<FCMのコンソールにあるサーバキー>" \
    --Header "Content-Type: application/json" \
    https://fcm.googleapis.com/fcm/send \
    -d @- << EOF
    {
        "to": "<通知をおくりたいFCM Token>",
        "notification": {
            "body": "お知らせテスト"
        },
        "priority":10,
        "mutable_content":true
    }
    EOF
    

    서버 키 오류가 발생하면 다음과 같은 오류가 발생합니다.인증서가 틀렸다면, error는 InvalidRegistration 같은 것일 것입니다.성공하면"success":1, "failure":0.
    {"multicast_id":********,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"MismatchSenderId"}]}
    

    등록된 p12 또는 p8 파일 문제


    이것은 처음부터 사용한 추식 통지 증명서입니다. 순조롭지만 설정 업데이트가 진행되었기 때문에 저희도 다시 내보냅니다. FCM 콘솔에 등록하면...
    BundleIdが一致していません
    
    오류가 발생하여 업로드할 수 없습니다.
    여기는 p12로 많이 만들어도 이유를 몰라서 p8로 바꿔서 올렸어요.
    아마 이렇게 추식 통지 증명서는 정상적으로 통과될 것이다.
    다시 curl"success":1, "failure":0을 두드렸기 때문에 FCM 측은 성공했지만 통지는 오지 않았습니다...

    Xcode 설정 문제


    Xcode?그래서 이 근처에서 검사를 했습니다.
  • PROJECT > TARGETS > 該当ターゲット Capabities 질문
  • 배경 모드 원격 공지 켜기
  • 푸시 공지의 Steps 선택 여부
  • XCode의 Entitlement 문제
  • APS 환경 존재 여부
  • 보관 시 debug 적합성 여부
  • XCode의plist 문제
  • XCodeBuild Settingsplist가 Debug
  • 에 적합하지 않음
  • GoogleService-info.plist 문제
  • 디버그를 잘못했나요?
  • 자신의 경우 개발판을 복제한 TARGET가 정식 공연을 만들었기 때문에plist는 개발판을 지향한다.
    참고로 Entitlemnets의 값이'development'라고 해도 압축 파일을 저장할 때 마음대로 프로덕션으로 바꿀 수 있기 때문에 여기가 좋습니다.
    GoogleService-info.plist는 문제가 없는 것 같습니다. 공식적인 것입니다.
    여기까지만 확인하고 전항과 같이curl로 FCM API를 두드렸지만 알림을 받지 못했습니다.

    APNs 문제


    다음은 APNs입니다.다음은 AppDelegate입니다.m에서 Device Token을 구입하여 취득하고 NWPusher을 Mac에 설치하여 FCM을 통해 알림을 보내지 않아도 되는지 확인합니다.
    AppDelegate.m
    
    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
      NSLog(@"deviceToken: %@", deviceToken);
    }
    

    ※ AdHoc에서 확인Should use sandbox environment, 본선에서 확인하려면 검사 취소
    이렇게 되면 알림을 받으면 APNs가 아니라 Xcode의 설정이나 실시에 문제가 있습니다.
    겸사겸사 말씀드리지만, 통지가 순조롭게 도착했습니다!따라서 구성, 밀어넣기 알림 증명, FCM의 소통, APNs에 문제가 없음을 알 수 있습니다.
    그리고요?도대체 뭐야?

    구현 문제

  • react-native 측의 설치 문제
  • Foreground에서 알림을 캡처할 수 없을 때
  • 이번에 처리하지 않고 백그라운드에서 알림센터를 두드렸을 때 활동이 없었다
  • AppDelegate.m(or .swift) 질문
  • 확인된 항목은 위의 2항이지만 문제는'알림센터에 도착한 곳'react-native側の実装の問題이 먼저 통과했다는 것이다.
    각종 조사를 진행하면서 마침내 판명되었다.AppDelegate.m의 기술은 원인...
    react-native-firebase의 Issue는 해결 방법이 있습니다.알림을 받았습니다. 다음 Issue 주석을 참고하여 코드를 추가하십시오.
    It appears as if RNFirebase documentation is missing a few required steps. After adding the below code after [RNFirebaseNotifications configure]; in AppDelegate.m, remote notifications worked for me.
    
    // Setup Notifications
      if ([UNUserNotificationCenter class] != nil) {
        // iOS 10 or later
        // For iOS 10 display notification (sent via APNS)
        [UNUserNotificationCenter currentNotificationCenter].delegate = self;
        UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
        UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
        [FIRMessaging messaging].delegate = self;
        [[UNUserNotificationCenter currentNotificationCenter]
         requestAuthorizationWithOptions:authOptions
         completionHandler:^(BOOL granted, NSError * _Nullable error) {
           if (error) { NSLog(@"%@", error); }
         }];
      } else {
        // iOS 10 notifications aren't available; fall back to iOS 8-9 notifications.
        UIUserNotificationType allNotificationTypes =
        (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
        UIUserNotificationSettings *settings =
        [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
        [application registerUserNotificationSettings:settings];
      }
    [application registerForRemoteNotifications];
    Make sure to add the required import or else your code won't compile
    #import <UserNotifications/UserNotifications.h>
    
    참조: react-native-firebase: Issue#1203 IOS unable to receive notification
    이 평어도 있지만, 이 코드는 자신이 알고 있는react-native-firebase의 정식 문서와 FCM의 정식 문서에 따라 그 모습을 찾지 못했다.
    이렇게 하면 curl로 FCM API를 두드리든지 FCM 컨트롤러에서 테스트 알림을 보내든지 간에 알림이 순조롭게 도착할 수 있다.물론 TestFlight 환경도 마찬가지입니다.

    좋은 웹페이지 즐겨찾기