iOS 애플리케이션에서 즉각적인 알림을 제공하도록 APN 설정
소개하다.
지금은 저녁 8시인데 하루 종일 일했더니 피곤해.음식을 주문하고 싶지만 다음 시간에 마케팅 전화 영상이 필요합니다.너는 몰래 너의 아이폰을 검사하지 않고 음식이 언제 꺼내져 배달되는지 어떻게 알았니?
알림 푸시!
핸드폰의 최신 기술을 통해 두려움이 뭔지 아세요?
APNs(Apple Push Notification Service)를 사용하면 어플리케이션이 실행되지 않은 경우에도 원격 알림(밀어넣기 알림)을 보낼 수 있습니다.
APN은 어떻게 작동합니까?
원격 알림 제공은 다음 주요 구성 요소와 관련됩니다.
원격 알림은 귀사의 서버에서 시작합니다.사용자에게 어떤 알림을 보낼 것인지, 언제 보낼 것인지 결정할 수 있습니다.알림을 보내야 할 때, 알림 데이터와 사용자 장치의 유일한 식별자를 포함하는 요청을 생성합니다.그런 다음 사용자의 장치에 알림을 전달하는 APNs에 요청을 전달합니다.알림을 받으면 사용자 장치의 운영체제는 모든 사용자의 상호작용을 처리하고 알림을 응용 프로그램에 보냅니다.
공급자 서버를 설정하고 사용자 장치의 알림을 처리하기 위해 프로그램을 설정합니다.애플은 사용자에게 알림을 보내는 것을 포함해 둘 사이의 모든 것을 관리한다.서버와 통신하고 필요한 정보를 제공할 수 있는 프로그램을 사용자 장치에서 실행해야 합니다.
APN은 무엇을 제공합니까?
APNs는 응용 프로그램이 서버에서 알림을 전송하고 최상의 사용자 체험으로 알림을 보낼 수 있도록 하는 메커니즘을 제공합니다.
알림을 푸시하는 용도는 무엇입니까?
채팅 애플리케이션에서 APN 설정
이 자습서에서는 응용 프로그램에 APN을 설정하는 방법과 원격 알림 서비스를 통합하는 방법을 학습합니다.이 자습서에서는 Applozic's iOS SDK 제품을 사용합니다.Delldocumentation at GitHub에 따라 통합 프로세스의 처음 두 단계를 완료하십시오.
Initial Setup 및 가입frameworks 및permissions.
Registering a user 신청 가능
어플리케이션을 구성하고 APNs에 등록
APNs 인증서 생성
애플이 사용자 장치에 푸시 알림을 보내려면 애플 개발자 계정에 APNs 인증서를 만들어야 합니다.
Note: Supported format for APNs certificate is .p12
인증서를 만든 후 인증서를 다운로드하고 내보낼 수 있습니다.p12 사용Keychain Access in Mac. 인증서 개발 및 배달 암호 파일
APNs 인증서 업로드
APNs 개발 및 릴리즈 인증서를 업로드하려면 Applozic console push notification section로 이동합니다.다음 화면 캡처가 콘솔에 표시됩니다.
콘솔 대시보드의 푸시 알림 화면
애플리케이션에 기능 추가
프로젝트의 Appdelegate 파일에서 푸시 알림을 구성합니다.
Appdelegate 파일에 다음 가져오기 추가
#import <Applozic/Applozic.h>
#import <UserNotifications/UserNotifications.h>
알림 처리 시 어플리케이션 시작 클릭 및 APN에 대한 원격 알림 등록
AppDelegate에 다음 코드를 추가합니다.m클래스, 이 함수는 프로그램이 시작된 후에 호출되어 알림을 등록합니다.
// UNUserNotificationCenterDelegate are required for APNs call backs please add this delegate to your AppDelegate file
@interface AppDelegate () <UNUserNotificationCenterDelegate>
@end
// didFinishLaunchingWithOptions method of your app
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// checks whether app version is updated/changed then makes server call setting VERSION_CODE
[ALRegisterUserClientService isAppUpdated];
// Register APNs and Push kit
[self registerForNotification];
// Register for Applozic notification tap actions and network change notifications
ALAppLocalNotifications *localNotification = [ALAppLocalNotifications appLocalNotificationHandler];
[localNotification dataConnectionNotificationHandler];
ALPushNotificationHandler *pushNotificationHandler = [ALPushNotificationHandler shared];
[pushNotificationHandler dataConnectionNotificationHandler];
// Override point for customization after application launch.
NSLog(@"launchOptions: %@", launchOptions);
if (launchOptions != nil) {
NSDictionary *dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (dictionary != nil) {
NSLog(@"Launched from push notification: %@", dictionary);
ALPushNotificationService *pushNotificationService = [[ALPushNotificationService alloc] init];
BOOL applozicProcessed = [pushNotificationService processPushNotification:dictionary updateUI:[NSNumber numberWithInt:APP_STATE_INACTIVE]];
//IF not a appplozic notification, process it
if (!applozicProcessed) {
//Note: notification for app
}
}
}
return YES;
}
// Register APNs
-(void)registerForNotification
{
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error)
{
if(!error)
{
dispatch_async(dispatch_get_main_queue(), ^ {
[[UIApplication sharedApplication] registerForRemoteNotifications]; // required to get the app to do anything at all about push notifications
NSLog(@"Push registration success." );
});
}
else
{
NSLog(@"Push registration FAILED" );
NSLog(@"ERROR: %@ - %@", error.localizedFailureReason, error.localizedDescription );
NSLog(@"SUGGESTIONS: %@ - %@", error.localizedRecoveryOptions, error.localizedRecoverySuggestion );
}
}];
}
APNs 장치 토큰을 Applozic 서버에 전송
Appdelegate 파일에 다음 코드를 추가합니다.만약 이 방법 중 하나가 이미 존재한다면, 아래의 방법에서 관련 코드를 복사해서 붙일 수 있습니다.
// APNs device token sending to Applozic
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)
deviceToken {
const unsigned *tokenBytes = [deviceToken bytes];
NSString *hexToken = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x",
ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]),
ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]),
ntohl(tokenBytes[6]), ntohl(tokenBytes[7])];
NSString *apnDeviceToken = hexToken;
NSLog(@"apnDeviceToken: %@", hexToken);
if (![[ALUserDefaultsHandler getApnDeviceToken] isEqualToString:apnDeviceToken]) {
ALRegisterUserClientService *registerUserClientService = [[ALRegisterUserClientService alloc] init];
[registerUserClientService updateApnDeviceTokenWithCompletion
:apnDeviceToken withCompletion:^(ALRegistrationResponse
*rResponse, NSError *error) {
if (error) {
NSLog(@"%@",error);
return;
}
NSLog(@"Registration response%@", rResponse);
}];
}
}
푸시 알림 수신
애플리케이션은 알림을 받은 후 Applozic 프로세서에 채팅 알림 처리를 전달합니다.
// UNUserNotificationCenter delegates for chat
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification*)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {
ALPushNotificationService *pushNotificationService = [[ALPushNotificationService alloc] init];
NSDictionary *userInfo = notification.request.content.userInfo;
NSLog(@"APNS willPresentNotification for userInfo: %@", userInfo);
if ([pushNotificationService isApplozicNotification:userInfo]) {
[pushNotificationService notificationArrivedToApplication:[UIApplication sharedApplication] withDictionary:userInfo];
completionHandler(UNNotificationPresentationOptionNone);
return;
}
completionHandler(UNNotificationPresentationOptionAlert|UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound);
}
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(nonnull UNNotificationResponse* )response withCompletionHandler:(nonnull void (^)(void))completionHandler {
ALPushNotificationService *pushNotificationService = [[ALPushNotificationService
alloc] init];
NSDictionary *userInfo = response.notification.request.content.userInfo;
NSLog(@"APNS didReceiveNotificationResponse for userInfo: %@", userInfo);
if ([pushNotificationService isApplozicNotification:userInfo]) {
[pushNotificationService notificationArrivedToApplication:[UIApplication sharedApplication] withDictionary:userInfo];
completionHandler();
return;
}
completionHandler();
}
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler{
NSLog(@"RECEIVED_NOTIFICATION_WITH_COMPLETION :: %@", userInfo);
ALPushNotificationService *pushNotificationService = [[ALPushNotificationService alloc] init];
if ([pushNotificationService isApplozicNotification:userInfo]) {
[pushNotificationService notificationArrivedToApplication:application withDictionary:userInfo];
completionHandler(UIBackgroundFetchResultNewData);
return;
}
completionHandler(UIBackgroundFetchResultNewData);
}
- (void)applicationWillTerminate:(UIApplication *)application {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
[[ALDBHandler sharedInstance] saveContext];
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
// Called as part of the transition from the background to the inactive state; here you can undo any of the changes made on entering the background.
NSLog(@"APP_ENTER_IN_FOREGROUND");
[application setApplicationIconBadgeNumber:0];
}
결론
본고는 먼저 APN의 작업 원리와 우리 응용 프로그램에서 어떻게 사용하는지 소개한다.또한 APN 설정 요구 사항과 애플리케이션에 대한 원격 알림의 다양한 사용 사례에 대해서도 알아봤습니다.
그런 다음 Applozic의 iOS SDK를 사용하여 애플리케이션을 구성하고 APNs에 등록합니다.응용 프로그램에 원격 알림과 백엔드 가져오기 기능을 추가했습니다.
마지막으로, 우리는 몇 가지 코드 세션을 소개했는데, 이 코드 세션들은 응용 프로그램에서 전송 알림의 발송과 수신을 설정할 수 있도록 합니다.
이 강좌가 끝나면 iOS의 푸시 알림 생태계와 응용 프로그램에서 APN을 활용하는 방법에 대해 잘 알고 있어야 합니다.
아래의 댓글에 당신의 피드백과 의문을 남겨 주십시오!
Reference
이 문제에 관하여(iOS 애플리케이션에서 즉각적인 알림을 제공하도록 APN 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/applozic/set-up-apns-to-deliver-instant-notifications-in-your-ios-app-218j텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)