Client SDK - React Native
Notifly React Native SDK는 노티플라이를 React Native 어플리케이션과 연동하기 위해 사용할 수 있습니다. 다음과 같은 기능들을 지원합니다:
- 기기 정보를 노티플라이에 등록하여 노티플라이를 통해 발송된 앱 푸시, 인앱 팝업을 React Native 앱에서 수신할 수 있습니다.
- 노티플라이의 인앱 팝업은 앱이 Foreground 상태일 때만 수신됩니다. Background 및 Quit 상태일 때는 무시됩니다.
- 이벤트, 유저 정보를 노티플라이와 연동하여 모든 캠페인에서 활용할 수 있습니다.
- 캠페인의 성과를 측정할 수 있도록 이벤트를 로깅합니다.
노티플라이에서는 푸시를 발송하기 위해 Firebase Cloud Messaging을 활용하고 있습니다. 다음 과정을 먼저 진행해주세요:
1. Notifly SDK 셋업
1-1. Notifly SDK 설치
패키지를 설치하기 위해, 다음을 실행해 주세요:
npm install notifly-sdk@latest --save
cd ios && pod install
yarn을 사용하시는 경우:
yarn add notifly-sdk@latest
cd ios && pod install
앱 패키지의 package.json 파일에 notifly-sdk가 추가됩니다. (현재 최신 버전: )
1.2. iOS 설정
1) Capability 설정
- Xcode에서 {Your_Project_Name}.xcworkspace를 열어주세요.
- Xcode에서 {Your_Project_Name}.xcworkspace를 열지 않고 {Your_Project_Name}.xcodeproj를 열어서 빌드하면, Notifly SDK를 사용할 수 없습니다.
- {Your_Project_Name}.xcworspace는 Root 디렉토리의 ios 디렉토리에 있습니다.
- 대상 Project의 iOS Deployment Target과 Target의 Minimum Deployments iOS를 13.0 혹은 그 이상으로 설정합니다.
- Podfile에서도 최소 버전을 13.0으로 설정해주세요.
Push Notification Capability를 추가합니다.
Background Modes Capability를 추가합니다. - Remote notifications과 Background Fetch를 선택합니다.
AppDelegate.mm 파일을 열어서 다음 코드를 추가합니다.
AppDelegate.mm ios 디렉토리의 {ProjectName} 폴더에 있습니다.
notifly_sdk
프래임워크를 import 합니다.
#import "notifly_sdk-Swift.h"
- AppDelegate.h에서 AppDelegate 클래스에
UNUserNotificationCenterDelegate
프로토콜을 추가합니다.- 아래 예시코드를 참고해주세요.
- AppDelegate.mm의
AppDelegate method
들에 Notifly코드를 추가해 주세요.(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- UNNotificationCenter의 delegate를 self로 설정합니다.
(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
- APNs 토큰을 노티플라이에 등록합니다.
(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
- APNs 토큰 등록에 실패한 경우, 노티플라이에 알립니다.
(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler
- 앱 푸시 알림 클릭 이벤트를, 노티플라이로 전달합니다.
(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler
- 앱이 Foreground 상태일 때, 노티플라이로부터 수신한 데이터를 SDK로 전달합니다.
- AppDelegate.h
- AppDelegate.mm
Example Code of AppDelegate.h
#import <RCTAppDelegate.h>
#import <UIKit/UIKit.h>
#import <UserNotifications/UNUserNotificationCenter.h>
@interface AppDelegate : RCTAppDelegate <UNUserNotificationCenterDelegate>
@end
Example Code of AppDelegate.mm
#import <Firebase.h>
#import <React/RCTBundleURLProvider.h>
#import "AppDelegate.h"
#import "notifly_sdk-Swift.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
/* Your Code */
[FIRApp configure];
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
[[UIApplication sharedApplication] registerForRemoteNotifications];
/* Your Code */
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
/* Your Code */
[Notifly application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
/* Your Code */
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
/* Your Code */
[Notifly application:application didFailToRegisterForRemoteNotificationsWithError:error];
/* Your Code */
}
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler {
/* Your Code */
[Notifly userNotificationCenter:center didReceive:response];
completionHandler();
/* Your Code */
}
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {
/* Your Code */
[Notifly userNotificationCenter:center willPresent:notification withCompletionHandler:completionHandler];
/* Your Code */
}
/* Your Code */
@end
1-3. (권장) iOS Push Extension 설정
SDK spec for Rich Push Notification
notifly-sdk
: 3.0.4 버전 이상
- Notifly의 안내에 따라, Notification Service Extension을 설정하시면 다음 기능들이 지원되기 때문에, 설정하시길 권장드립니다.
- 푸시 알림에 이미지 및 비디오를 첨부할 수 있습니다.
- 유저의 푸시 수신 여부를 확인할 수 있어, 캠페인 성과를 보다 자세하게 확인하실 수 있습니다.
1-4. Notifly SDK 초기화 코드 추가
- index.js 또는 App.js에서 Notifly SDK 초기화 코드를 추가해 주세요.
- javascript
index.js
...
import notifly from 'notifly-sdk';
/* Your Code */
notifly.initialize({
projectId: 'myProjectId',
username: 'myUserName',
password: 'myPassword',
});
/* Your Code */
AppRegistry.registerComponent(...);
프로젝트 ID
, Username
, Password
값은 노티플라이 홈페이지의 설정 페이지에서 확인하실 수 있습니다.
2. 유저 프로퍼티 등록하기
- 노티플라이에서는 유저의 아이디 (userId) 및 프로퍼티 (params)를 설정하여 마케팅 캠페인 집행 시에 활용할 수 있습니다.
- 노티플라이에서는 채널 별 푸시 알림 수신 동의 여부를 유저 프로퍼티로 설정하여, 푸시 알림 전송 전에 필터링 할 수 있습니다.
- 카카오 알림톡, 친구톡, 문자 발송을 위해서는 전화번호를 유저 프로퍼티로 설정해야 합니다.
- 이메일 발송을 위해서는 이메일 주소를 유저 프로퍼티로 설정해야 합니다.
- 전화번호와, 이메일의 프로퍼티 필드명은 꼭 각각 $phone_number, $email로 설정해 주세요.
- Notifly SDK 초기화 코드 추가를 마친 후 프로퍼티 등록을 시작해 주세요.
- (권장사항) 로그아웃 시 userId를 null로 하여 setUserId 호출함으로써 유저의 userId 등록을 해지해 주세요.
- 유저 아이디 등록해지를 호출할 경우, 유저 프로퍼티 및 캠페인 피로도 관리 데이터 등 모든 유저 정보가 삭제됩니다.
2-1. 유저 아이디 등록
Parameter | Type | Required |
---|---|---|
userId | String | Yes |
notifly.setUserId(userId);
- javascript
Example Code of setUserId
const handleLogin = () => {
...
notifly.setUserId('example_user_id'); // Set User Id
...
}
const handleLogout = () => {
...
notifly.setUserId(); // Unregister User Id
...
}
2-2. 유저 프로퍼티 등록
Parameter | Type | Required |
---|---|---|
params | Object | Yes |
notifly.setUserProperties(params);
- javascript
Example Code of setUserProperties
const handleRejectPushNotification = () => {
...
notifly.setUserProperties({
"push_subscription_channel1": false,
"push_subscription_channel2": false,
"push_subscription_channel3": false,
});
...
}
3. 이벤트 로깅
- 노티플라이에서는 유저의 행동 등 이벤트를 트래킹하여 캠페인 집행 시 타겟팅에 활용할 수 있습니다. 트래킹 된 이벤트는 푸시 알림 발송 타이밍, 발송 대상 설정 등에 활용할 수 있습니다.
- Notifly SDK 초기화 코드 추가를 마친 후 이벤트 로깅을 시작해 주세요.
- segmentationEventParamKeys 활용하여 이벤트 변수 (eventParams)를 발송 대상 설정 등에 활용할 수 있습니다. 이를 위해서, 발송 대상 설정에 사용할 eventParams의 특정 field의 key 값을 segmentationEventParamKeys에 지정해주세요.
- 현재는 segmentationEventParamKeys 한 개까지 지원하고 있기 때문에, segmentationEventParamKeys 길이는 1이하인 List이어야합니다.
3-1. 이벤트 로깅
Parameter | Type | Required |
---|---|---|
eventName | String | Yes |
eventParams | Object | No |
segmentationEventParamKeys | List<String> | No |
notifly.trackEvent(eventName, eventParams, segmentationEventParamKeys);
- javascript
Example Code of trackEvent
const handlePurchaseTicket = () => {
...
notifly.trackEvent("ticket_purchase", {
"show_id": "sample_show_id",
"performance_start_time": 1674104659
}, ["show_id"]);
...
}
const handleLogin = () => {
...
notifly.trackEvent("login");
...
}
4. 연동 테스트
Client SDK - 연동 Test 섹션에서 테스트를 진행합니다.
5. (Advanced) 푸시 알림 아이콘 등록 (Android) & 푸시 알림 동의 프롬프트
(Advanced) Client SDK - React Native 를 참고해 주세요.
6. (Advanced) 푸시 알림 클릭 이벤트 구독
(Advanced) Client SDK - React Native 를 참고해 주세요.
FAQ
- Q. 이미 Firebase Cloud Messaging을 사용 중인데 어떻게 해야 할까요?
- A. Notifly SDK는 기존 앱에서 사용하고 있을 수 있는 Firebase Cloud Messaging과의 충돌을 방지하기 위한 처리를 이미 자체적으로 구현해 두었기 때문에 안전하게 사용하실 수 있습니다.
- Q. Build시 AppDelegate.mm 파일에서 Notifly 클래스 관련 에러가 발생합니다.
- A. Podfile에
use_frameworks! :linkage => :static
라인을 추가하여 Static Linking을 시도해주세요. (기존에use_frameworks!
라인이 존재한다면,:linkage => :static
옵션만 추가해주세요.)
- A. Podfile에
- Q. iOS기기에서 Foreground 상태에서 푸시 알림이 오지 않습니다.
- A. Firebase Messaging을 이미 사용하시고 계시다면, firebase.json 파일에 아래 안내에 따라 설정해주세요.
- React Native Firebase의 Foreground Presentation Options의 가이드에 따라 firebase.json 파일에 다음 코드를 추가해주세요.
{
"react-native": {
"messaging_ios_foreground_presentation_options": [
"badge",
"sound",
"list",
"banner"
]
}
}
- A. Firebase Messaging을 이미 사용하시고 계시다면, firebase.json 파일에 아래 안내에 따라 설정해주세요.
- Q. notifly_sdk-Swift.h 파일을 찾을 수 없다는 에러가 뜹니다. 어떻게 해야 할까요?
- notifly_sdk(ios)는 Swift로 작성되어 있습니다. 이에 Objective-C 환경으로 노출시키기 위해 빌드되는 과정에서 Swift Compatibility Header가 생성되는데, 이 헤더 파일의 이름이 notifly_sdk-Swift.h입니다. 빌드를 진행하고자하는 타겟의 Builld Option의 Header Search Paths에 "${PODS_CONFIGURATION_BUILD_DIR}"를 추가해주세요.
- 참고