Firebase push-notification가 IOS에만 동작하지 않는 질문입니다.부탁드립니다

안드로이드는 정상작동하지만 IOS에서는 일부기기만 동작합니다.
제 기기나 다른 테스트용 기기에서는 작동하지만 다른기기에서는 푸시알람이 가질않습니다.

Certificates 항목에
apple push service 추가
Identifiers 항목에
push notification - push service 추가
key 항목에
Enabled Services 추가
profiles 항목에
Enabled Capabilities에 push notification 추가

xcode 버전
Xcode version Version 12.1 (12A7403)

라이브러리는 다음을 사용하고있습니다.
“react-native”: “^0.63.2”,
“react-native-push-notification”: “^6.1.2”,
@react-native-community/push-notification-ios”: “^1.7.1”,

AppDelegate.m 소스코드입니다.

#import "AppDelegate.h"
#import <CodePush/CodePush.h>
#import <AppCenterReactNative.h>
#import <Firebase.h>

#import <React/RCTBridge.h>
#import <React/RCTBundleURLProvider.h>
#import <React/RCTRootView.h>
#import <GoogleMaps/GoogleMaps.h>
#import <FBSDKCoreKit/FBSDKCoreKit.h>

#ifdef FB_SONARKIT_ENABLED
#import <UserNotifications/UserNotifications.h>
#import <RNCPushNotificationIOS.h>
#import <FlipperKit/FlipperClient.h>
#import <FlipperKitLayoutPlugin/FlipperKitLayoutPlugin.h>
#import <FlipperKitUserDefaultsPlugin/FKUserDefaultsPlugin.h>
#import <FlipperKitNetworkPlugin/FlipperKitNetworkPlugin.h>
#import <SKIOSNetworkPlugin/SKIOSNetworkAdapter.h>
#import <FlipperKitReactPlugin/FlipperKitReactPlugin.h>
#import <KakaoOpenSDK/KakaoOpenSDK.h>



static void InitializeFlipper(UIApplication *application) {
  FlipperClient *client = [FlipperClient sharedClient];
  SKDescriptorMapper *layoutDescriptorMapper = [[SKDescriptorMapper alloc] initWithDefaults];
  [client addPlugin:[[FlipperKitLayoutPlugin alloc] initWithRootNode:application withDescriptorMapper:layoutDescriptorMapper]];
  [client addPlugin:[[FKUserDefaultsPlugin alloc] initWithSuiteName:nil]];
  [client addPlugin:[FlipperKitReactPlugin new]];
  [client addPlugin:[[FlipperKitNetworkPlugin alloc] initWithNetworkAdapter:[SKIOSNetworkAdapter new]]];
  [client start];
}
#endif

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
{
  if ([FIRApp defaultApp] == nil) {
    [FIRApp configure];
  }
//    [AppCenterReactNative register];
//    [AppCenterReactNativeAnalytics registerWithInitiallyEnabled:true];
//    [AppCenterReactNativeCrashes registerWithAutomaticProcessing];
//codePush-IOS


  [[FBSDKApplicationDelegate sharedInstance] application:application
  didFinishLaunchingWithOptions:launchOptions];
  
//  if ([FIRApp defaultApp] == nil) {
//    [FIRApp configure];
////    [RNFirebaseNotifications configure];
//  }

  #if DEBUG

  #endif
  [GMSServices provideAPIKey:@"AIzaSyBJao2sARSCYwF74BCqwRf3hexsP8Pkzj0"]; // add this line using the api key obtained from Google Console
#ifdef FB_SONARKIT_ENABLED
  InitializeFlipper(application);
#endif
  RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
  RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
  moduleName:@"sikju_remaster"
                           
  initialProperties:nil];
  
  rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
  self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
  UIViewController *rootViewController = [UIViewController new];
  rootViewController.view = rootView;
  self.window.rootViewController = rootViewController;
  [self.window makeKeyAndVisible];
  
  //notification
  UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
  center.delegate = self;
  return YES;
}
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
       willPresentNotification:(UNNotification *)notification
         withCompletionHandler:
             (void (^)(UNNotificationPresentationOptions options))
                 completionHandler {
  completionHandler(UNNotificationPresentationOptionSound | UNNotificationPresentationOptionBadge | UNNotificationPresentationOptionAlert);
}
#if DEBUG
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
  [RNCPushNotificationIOS didRegisterUserNotificationSettings:notificationSettings];
}
// Required for the register event.
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
  [RNCPushNotificationIOS didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}
// Required for the notification event. You must call the completion handler after handling the remote notification.
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
  [RNCPushNotificationIOS didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
}
// Required for the registrationError event.
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
  [RNCPushNotificationIOS didFailToRegisterForRemoteNotificationsWithError:error];
}
// Required for the localNotification event.
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
  [RNCPushNotificationIOS didReceiveLocalNotification:notification];
}
// Required for localNotification event
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
didReceiveNotificationResponse:(UNNotificationResponse *)response
  withCompletionHandler:(void (^)(void))completionHandler
{
  [RNCPushNotificationIOS didReceiveNotificationResponse:response];
}

//- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
//    if ([KOSession isKakaoAccountLoginCallback:url]) {
//        return [KOSession handleOpenURL:url];
//    }
//    [KOSession sharedSession].automaticPeriodicRefresh = YES;
//    return false;
//}
//- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
//    if ([KOSession isKakaoAccountLoginCallback:url]) {
//        return [KOSession handleOpenURL:url];
//    }
//    [KOSession handleDidEnterBackground];
//    return false;
//}
//
//- (void)applicationDidBecomeActive:(UIApplication *)application {
//    [KOSession handleDidBecomeActive];
//}

fileprivate func convertHexDataToString(_ data: Data) -> String {
    var string: String = ""
    for i in 0..<data.count {
        string += String(format: "%02.2hhx", data[i] as CVarArg)
    }
    return string
}

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    let tokenString = convertHexDataToString(deviceToken)
    #if DEBUG
    print("APN sandbox token: '\(tokenString)'")
    Messaging.messaging().setAPNSToken(deviceToken, type: .sandbox)
    #else
    print("APN prod token: '\(tokenString)'")
    Messaging.messaging().setAPNSToken(deviceToken, type: .prod)
    #endif
}


#endif
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
{
#if DEBUG
  return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
#else
//   return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; //
          return [CodePush bundleURL];
#endif
}

- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
  return [[FBSDKApplicationDelegate sharedInstance]application:app
            openURL:url
            options:options];
}
//facebook login
@end

몇주째 찾고있는데 해결이안되고있습니다. 왜그럴까요?ㅠㅜ

혹시 Capabilities에서 Push Notifications 설정하실 때 Production SSL Certificate로 설정되어있나요?

설정확인은 어떻게 할 수있을까요? xcode에서는 push notification 삭제하기밖에 안보입니다.

https://developer.apple.com/account

위의 페이지에서 개발자 계정으로 로그인하신 후에 Certificates, Identifiers & Profiles 페이지에서 Identifiers에 앱 이름을 클릭하시면 설정해두신 Capabilities이 보이고 Push Notifications 옆에 edit를 누르면 뭐로 설정되어있는지 알 수 있습니다.

다음과 같습니다 같은 certificatesigning 파일로 업로드해도 하나는 apns development IOS로 올라가고 다른 하나는 aps로 올라가더라구요

음 제 기기나 다른 테스트용 기기에서는 작동한다는 것이 아무래도 인증서를 development ssl 인증서를 사용하셔서 그런거 같은데 production ssl 인증서를 사용하셔도 동일한가요?

apple distribution으로 진행하면 될까요? automatically manage signin으로하면 develop로 잡혀서 진행되더라구요

음 일단 저희는 development ssl 인증서는 삭제 후에 사용 중이라 정 안 되시면 삭제하고 진행하셔도 될거 같아요.
어차피 프로덕션이냐 테스트냐는 파이어베이스 프로젝트로 구분해도 되서요.

signing certificate를 apple distribution로 진행해도 pushnotification이 작동되지않습니다 ㅠㅠ
이번엔 한개의 기기에서만 작동하네요

음 인증서 문제가 아니라면 서버로 푸시 토큰이 제대로 전달되지 못하는 문제가 있을거 같은데.
아무리봐도 인증서 문제같아서요…

혹시나 푸시 토큰이 제대로 서버로 가는지 체크가 필요해보이고 제대로 전달된다면 인증서를 다시 한번 체크해보시길 바랍니다.

둘 다 문제가 없다면 저의 지식으로써는 잘 모르겠네요.

좋아요 1

답변 감사합니다. ㅠㅠ 한번 더 확인해볼게요.