IOS 로컬 푸시 학습 수기

2877 단어
iOS에는 두 가지 메시지 알림이 있는데 하나는 로컬 메시지(Local Notification), 하나는 원격 메시지(Push Notification, Remote Notification)입니다. 이 두 가지 알림을 디자인하는 목적은 모두 사용자에게 현재 어떤 새로운 일이 발생했는지 알려주고 사용자를 끌어들여 앱을 다시 열도록 하기 위한 것입니다.로컬 푸시도 서버를 통해 제어할 수 있다. 예를 들어 새로운 소식이 있으면 메시지를 푸시할 수 있다. 그러나 전제 조건은 프로그램이 반드시 열려 있어야 하는 것이다. 원격 푸시는 애플 APNS 서버를 통해 핸드폰을 푸시할 수 있다. 핸드폰은 구체적인 어떤 프로그램을 푸시할 때 일반적으로 원격 푸시가 많이 사용된다.
먼저 appdelegate에 등록합니다.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];// 
    
    // Override point for customization after application launch.
    return YES;
}

그리고 구체적인viewcontroller에서 푸시:
- (IBAction)localPushNow:(id)sender {
 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        // 
        UILocalNotification*notification = [[UILocalNotification alloc]init];
        NSDate * pushDate = [NSDate dateWithTimeIntervalSinceNow:10];
        if (notification != nil) {
            notification.fireDate = pushDate;
            notification.timeZone = [NSTimeZone defaultTimeZone];
            notification.repeatInterval = kCFCalendarUnitDay;
            notification.soundName = UILocalNotificationDefaultSoundName;
            notification.alertBody = @"hello,world";
            notification.applicationIconBadgeNumber = 0;
            NSDictionary*info = [NSDictionary dictionaryWithObject:@"test" forKey:@"name"];
            notification.userInfo = info;
            [[UIApplication sharedApplication] scheduleLocalNotification:notification];
            
        }
    });

}

메시지를 받을 필요가 있으면 다시 쓰는 방법은 다음과 같습니다.
앱delegate에서 푸시 메시지가 수신됩니다.
// 
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{
    NSLog(@"%@",notification.alertBody);
    UILabel*label = [[UILabel alloc]init];
    label.frame = CGRectMake(0, 0, 160, 20);
    label.layer.cornerRadius = 10;
    label.backgroundColor = [UIColor blackColor];
    label.text = notification.alertBody;
    label.textColor = [UIColor whiteColor];
    label.font = [UIFont systemFontOfSize:12];
    label.textAlignment = NSTextAlignmentCenter;
    
    [self.window addSubview:label];
}

이 과정에서 다음과 같은 상황이 발생할 수 있습니다.
Attempting to schedule a local notification……with a sound but haven't received permission from the user to play sounds
Attempting to schedule a local notification……with an alert but haven't received permission from the user to display alerts
등록하지 않았거나 설정에서 푸시 기능이 켜지지 않았기 때문일 수도 있습니다.

좋은 웹페이지 즐겨찾기