iOS SDK 매뉴얼
Xcode 14.1 버전 기반으로 설명하고 있습니다.
iOS용 핑거푸시 SDK를 다운로드 하신 후 Sample 소스를 참고하시기 바랍니다.
SDK를 다운로드 받은 후 XCODE에서 프로젝트를 생성합니다.
1) 다운 받은 프레임워크(finger.xcframework)를 프로젝트에 추가합니다.

2) Xcode에서 TARGETS 선택 후 General 탭에서 'Frameworks, Libraries, and Embedded Content' 항목에 프레임워크(finger.xcframework)가 추가 되었는지 확인합니다. ('Embed&Sign'로 설정)

Target 선택 후 Signing&Capabilities 탭에서 'Push Notifications'를 추가해주면 자동으로 AppName.entitlements 파일이 생성됩니다.

Bundle version(build) 값이 int형이면 따로 AppVersionInt 값을 추가하지 않아도 됩니다.
int형이 아닌 경우 AppVersionInt 값을 추가하여 설정합니다.

1) Xcode project navigator의 'File>New>File'에서 Header File 선택 후, 'ProjectName-Bridging-Header.h'로 추가합니다.

2) build Settings에서 Objective-C Bridging Header에 'ProjectName-Bridging-Header.h'의 경로를 추가합니다.

3) 'ProjectName-Bridging-Header.h'에 #import <finger/finger.h>를 추가합니다.

1) 핑거푸시 APP KEY 설정 및 RemoteNotifications 등록
개발용 DeviceToken과 배포용 DeviceToken이 섞이지 않도록 주의해 주십시오.
Swfit
Objective-C
/***
AppDelegate에 핑거푸시서버와 연동을 하기 위해서 다음과 같이 설정합니다.
***/
#import UserNotifications
//핑거푸시
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let fingerManager = finger.sharedData()
/*핑거푸시 APP KEY 설정*/
#if DEBUG
//개발용 앱
fingerManager?.setAppKey("발급받은 앱키")
fingerManager?.setAppScrete("발급받은 앱시크리트키")
#else
// 배포용 앱
fingerManager?.setAppKey("발급받은 앱키")
fingerManager?.setAppScrete("발급받은 앱시크리트키")
#endif
/*RemoteNotifications 등록*/
if #available(iOS 10.0, *) {
let center = UNUserNotificationCenter.current()
center.delegate = self
center.requestAuthorization(options: [.alert,.badge,.sound], completionHandler: { (granted, error) in
print("granted : \(granted) / error : \(String(describing: error))")
if granted {
DispatchQueue.main.async(execute: {
application.registerForRemoteNotifications()
})
}
})
}
..
..
}
/***
AppDelegate에 핑거푸시서버와 연동을 하기 위해서 다음과 같이 설정합니다.
***/
#import <finger/finger.h>
#import <UserNotifications/UserNotifications.h>
//핑거푸시
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
finger *_fingerManager = [finger sharedData]; //싱글톤 객체로 사용
/*핑거푸시 APP KEY 설정*/
#ifdef DEBUG
//개발용 앱
[_fingerManager setAppKey:@"발급받은 앱키"]; //App Key
[_fingerManager setAppScrete:@"발급받은 앱시크리트키"]; //AppScrete
#else
//배포용 앱
[_fingerManager setAppKey:@"발급받은 앱키"]; //App Key
[_fingerManager setAppScrete:@"발급받은 앱시크리트키"]; //AppScrete
#endif
/*RemoteNotifications 등록*/
if (@available(iOS 10.0, *)) {
UNUserNotificationCenter *userNotificationCenter = [UNUserNotificationCenter currentNotificationCenter];
userNotificationCenter.delegate = self;
[userNotificationCenter requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){
NSLog(@"granted :%i / error : %@",granted,error);
if (granted) {
//허용
dispatch_async(dispatch_get_main_queue(), ^{
[application registerForRemoteNotifications];
});
}
}];
}
..
..
}
2) 핑거푸시에 기기 등록
DeviceToken은 OS에 의해 변경될 수 있습니다. 따라서, 앱 실행 시마다 호출해야 합니다.
핑거푸시 모든 API는 기기 등록 API(register) 성공 후 사용할 수 있습니다.
Swift
Objective-C
//기기등록
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
//핑거푸시의 모든 api를 사용하기 위해서 기기등록 우선
finger.sharedData().registerUser(withBlock: deviceToken, { (posts, error) -> Void in
if error != nil{
print("기기 등록 : \(posts)")
} else {
//이미등록(504, 201) 무시.
print("기기 등록 error : \(error)")
}
})
}
//기기등록
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
//핑거푸시의 모든 api를 사용하기 위해서 기기등록 우선
[[finger sharedData] registerUserWithBlock:deviceToken :^(NSString *posts, NSError *error) {
if (!error)
{
NSLog(@"기기등록 %@", posts);
}else{
//이미등록(504, 201) 무시.
NSLog(@"기기등록 error %@", error);
}
}];
}
3) 푸시 메세지 수신 시 메세지 오픈/읽음 처리
Swift
Objective-C
//메세지 오픈 및 읽음 처리
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
//참고 : 메세지 정보 확인
let dicCode = finger.receviveCode(UserInfo)
let strPT = dicCode?["PT"] //메세지타입 - DEFT(일반) , STOS (서버투서버), LNGT(롱푸시)
let strIM = dicCode?["IM"] //이미지 여부 (0: 이미지 미 포함 , 1: 이미지 포함
let strWL = dicCode?["WL"] //웹링크 여부 (0: 웹링크 미포함 , 1: 웹링크 포함
//메세지 읽음 처리
finger.sharedData().requestPushCheck(withBlock: UserInfo , { (posts, error) -> Void in
if error != nil{
print("check : \(posts)")
} else {
print("check error : \(error)")
}
})
completionHandler()
}
//메세지 오픈 및 읽음 처리
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler {
//참고 : 메세지 정보 확인
NSDictionary* dicCode = [finger receviveCode:userInfo];
NSString *strPT = [dicCode objectForKey:@"PT"]; //메세지타입 - DEFT(일반) , STOS (서버투서버), LNGT(롱푸시)
NSString *strIM = [dicCode objectForKey:@"IM"]; //이미지 여부 (0: 이미지 미포함 , 1: 이미지 포함)
NSString *strWL = [dicCode objectForKey:@"WL"]; //웹링크 여부 (0: 웹링크 미포함 , 1: 웹링크 포함)
//메세지 읽음 처리
[[finger sharedData] requestPushCheckWithBlock:userInfo :^(NSString *posts, NSError *error) {
if (!error) {
NSLog(@"check : %@", posts);
}else{
NSLog(@"check error %@", error);
}
)];
completionHandler();
}
4) 푸시 수신 데이터(Payload)
{
aps = {
alert = {
body = "안녕하세요. 핑거푸시입니다";
title = "메세지 제목입니다.";
};
badge = 0; // 뱃지 카운트
category = fp; // 메세지 카테고리
"mutable-content" = 1; // notification service extension 사용 여부(이미지와 웹 링크 추가시)
sound = default; // 사운드
};
커스텀 데이터 키1 = 커스텀 데이터 값1;
커스텀 데이터 키2 = 커스텀 데이터 값2;
커스텀 데이터 키3 = 커스텀 데이터 값3;
code = "CD:1;IM:1;WL:1;PT:STOS";
// ( CD : 커스텀 데이터 여부(0 : 없음, 1 : 있음), IM : 이미지 첨부 여부(0 : 없음, 1 : 있음), WL : 웹 링크 여부(0 : 없음, 1 : 있음), PT : 메세지 타입(DEFT:일반푸시, STOS:Server to Server, LNGT:롱푸시))
imgUrl = "http://..."; // 이미지 URL
labelCode = ""; // 라벨 코드
msgTag = ...; // 메세지 고유 번호
weblink = "http://www.google.com"; // 웹 링크
}
Error.code 로 SDK 내부 오류 또는 서버 오류 여부를 확인할 수 있습니다.
- 900 : SDK 내부 에러 코드
- 901 : 핑거푸시 서버 에러 코드
코드 | 내용 | 비고 |
---|---|---|
200 | 정상 처리 | |
403 | App_key, secret 오류, 권한 없음 | |
404 | 조회 대상 없음, 조회 결과 없음 | |
500 | 처리 중 에러 | |
503 | 필수 값 없음 | |
504 | 이미 등록된 토큰 | 디바이스 등록에서만 사용 |
Xcode 14.1 버전 기반으로 설명하고 있습니다.
iOS용 핑거푸시 SDK를 다운로드 하신 후 Sample 소스를 참고하시기 바랍니다.
1) 기존 앱에 새 타겟(Notification Service Extension)을 추가합니다.


2) 새 타겟의 옵션을 각자에 맞게 설정합니다.
애플 개발자 사이트에서 Notification Service Extension 만의 App ID와 Provisioning Profiles을 생성해줘야 합니다.

Embed In Application 설정은 Xcode의 TAGETS/General/Embedded Binaries에서 수정이 가능합니다.
3) 다운로드 받은 핑거푸시 SDK의 'iOS>Framework>NoticationService' 폴더 안의 파일들을 프로젝트 내부에 추가합니다.

4) 'ProjectName-Bridging-Header.h'에 #import "fingerNotificationService.h"를 추가합니다.
5) 생성된 NotificationService에서 'fingerNotificationService' 클래스를 적용합니다.

Swift
Objective-C
/*Rich Notification*/
class NotificationService: fingerNotificationService {
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
self.disableSyncBadge()
super.didReceive(request, withContentHandler: contentHandler)
}
override func serviceExtensionTimeWillExpire() {
// Called just before the extension will be terminated by the system.
// Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
super .serviceExtensionTimeWillExpire()
}
}
//NotificationService.h
#import <UserNotifications/UserNotifications.h>
#import "fingerNotificationService.h"
@interface NotificationService : fingerNotificationService
@end
//NotificationService.m
@interface NotificationService ()
@end
@implementation NotificationService
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
[self disableSyncBadge];
[super didReceiveNotificationRequest:request withContentHandler:contentHandler];
}
- (void)serviceExtensionTimeWillExpire {
// Called just before the extension will be terminated by the system.
// Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
[super serviceExtensionTimeWillExpire];
}
@end
핑거푸시 사용자 콘솔에서 이미지 혹은 웹링크를 넣어 보내면 Rich Notification 형식으로 푸시를 발송합니다.

- 핑거푸시 샘플 다운로드
- 애플 개발자 사이트 UNNotificationServiceExtension
Last modified 1mo ago