Push Notification

Enable / Disable Push Notification

사용자가 Push Notification을 받을 지 여부를 설정할 수 있습니다.

// 사용자 Push Notification 활성화
[[TalkPlus sharedInstance] enablePushNotification:^(TPUser *tpUser) {
    // SUCCESS
} failure:^(int errorCode, NSError *error) {
    // FAILURE    
}];

// 사용자 Push Notification 비활성화
[[TalkPlus sharedInstance] disablePushNotification:^(TPUser *tpUser) {
    // SUCCESS
} failure:^(int errorCode, NSError *error) {
    // FAILURE    
}];

특정 채널의 Push Notification을 받을 지 여부를 설정할 수 있습니다.

// 채널 Push Notification 활성화
[[TalkPlus sharedInstance] enableChannelPushNotification:channel 
    success:^(TPChannel *tpChannel) {
    // SUCCESS
} failure:^(int errorCode, NSError *error) {
    // FAILURE    
}];

// 채널 Push Notification 비활성화
[[TalkPlus sharedInstance] disableChannelPushNotification:channel 
    success:^(TPChannel *tpChannel) {
    // SUCCESS    
} failure:^(int errorCode, NSError *error) {
    // FAILURE
}];

Push Notification

TalkPlus의 Push Notification은 FCM을 통하여 이루어지게 됩니다. 기본적인 FCM을 연동하신 후, User를 로그인한 후 registerFCMToken 함수를 호출하여 FCM 토큰을 User 세션에 연동하여야 합니다.

로그인이 완료된 후 아래와 같이 FIRMessaging을 통하여 token을 얻어 register 하시는 것을 권장 드립니다.

#import <UserNotifications/UserNotifications.h>
@import Firebase;

// 파이어베이스 초기화
[FIRApp configure];
    
// 푸시 권한 요청
UNUserNotificationCenter *center = 
    [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge)
    completionHandler:^(BOOL granted, NSError *error) {
    NSLog(@"granted: %@", granted ? @"YES":@"NO");
}];

// Firebase Messaging을 통하여 현재 token을 획득
[[FIRMessaging messaging] tokenWithCompletion:^(NSString * _Nullable token, NSError * _Nullable error) {
    if (error != nil) {
        NSLog(@"Error getting FCM registration token: %@", error);
    } else {
        NSLog(@"FCM registration token: %@", token);
        [self registerFCMToken:token];
    }
}];

-(void)registerFCMToken:(NSString *)fcmToken {
    [[TalkPlus sharedInstance] registerFCMToken:fcmToken success:^{
        NSLog(@"fcmToken register success");
    } failure:^(int errorCode, NSError *error) {
        NSLog(@"fcmToken register failure");
    }];
}

그 후 Push Notification이 도착할 경우 아래와 같이 TalkPlus에서 handleFCMMessage 함수를 통하여 payload를 처리하여 기존 등록된 delegate로 이벤트를 전달 드립니다.

- (void)userNotificationCenter:(UNUserNotificationCenter *)center
    willPresentNotification:(UNNotification *)notification
    withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler
{
    // foreground 상태에서 push가 실행될 때 수신
    NSDictionary *userInfo = notification.request.content.userInfo;
    if ([userInfo objectForKey:@"talkplus"] != nil) {
        NSLog(@"talkplus payload");
        [[TalkPlus sharedInstance] handleFCMMessage:[userInfo objectForKey:@"talkplus"]];
    }
    if (@available(iOS 14, *)) {
        completionHandler(UNNotificationPresentationOptionBadge|
                          UNNotificationPresentationOptionSound|
                          UNNotificationPresentationOptionBanner);
    } else {
        completionHandler(UNNotificationPresentationOptionBadge|
                          UNNotificationPresentationOptionSound);
    }
}

- (void)userNotificationCenter:(UNUserNotificationCenter *)center
    didReceiveNotificationResponse:(UNNotificationResponse *)response
    withCompletionHandler:(void (^)(void))completionHandler
{
    // background 상태에서  push를 클릭했을 때 호출
    NSDictionary *userInfo = response.notification.request.content.userInfo;
    if ([userInfo objectForKey:@"talkplus"] != nil) {
        // 웹 소켓 연결을 통해서 처리
        NSLog(@"talkplus payload found, but do nothing");
    }
}

Last updated