2017-02-19 1 views
0

다음과 같은 흐름이 있습니다. 첫 번째 앱 실행시 사용자에게 푸시 알림을 허용해야하는 이유를 설명하는보기를 제공합니다. 그런 다음 두 가지 옵션을 사용할 수 있습니다. 건너 뛰기 (이 경우 내가 푸시 알림에 등록하지 않음) 또는 푸시 알림을 수락합니다.이 경우 푸시 알림 팝업을 수락하거나 거절 할 수있는 위치에 표시합니다.iOS - 별도의 UIView에있는 registerForRemoteNotifications 콜백

두 가지 문제점이 있습니다. 우선, 나는 항상 다음 코드는 AppDelegate에에서 푸시 알림을 등록하는 데 사용 :

if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) 
{ 
    UIUserNotificationType types = (UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound); 
    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:types categories:nil]; 
    [application registerUserNotificationSettings:settings]; 
    [application registerForRemoteNotifications]; 
} 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 방법.

두 개의 버튼으로 표시되는보기에서 정확히 똑같은 코드를 사용하려고 시도하고 있으며 AppDelegate에서 코드를 제거했습니다. 어쨌든이 작업이 가능합니까? AppDelegate에 코드가있는 문제는 처음 시작시 푸시 알림을 수락하거나 거부하라는 메시지를 사용자에게 직접 표시한다는 것입니다.

그러면 사용자가 팝업 알림을 수락하거나 거절하자 마자 알아야 할 문제가 있습니다. 나는 그가 어떤 결정을 내렸는지 신경 쓰지 않고, 다음 번 전망을 제시 할 수 있도록 그가 제작하자마자 바로 알 필요가있다.

나는 다음과 같은 위임 방법을 시도했다 : 나도 허용을 클릭하거나 허용하지 않는 경우

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 

-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error 그러나 그들이가 호출되지 않습니다.

어떻게해야할까요?

+1

예. 응용 프로그램의 모든 위치에서 원격 알림 등록을 호출 할 수 있습니다. – ystack

+0

고마워요 @ystack. 콜백에 대해 아십니까? –

답변

1

이 문제에 대한 해결책을 찾았습니다. 우선, @ystack이 주석을 달았으므로 앱의 어디에서나 원격 알림 등록을 절대적으로 호출 할 수 있습니다. 동일의 ViewController에서

 [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(pushNotificationClicked:) 
               name:@"pushNotification" 
               object:nil]; 

그리고 마지막으로이 방법 :

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings { 
[application registerForRemoteNotifications]; 
[[NSNotificationCenter defaultCenter] 
postNotificationName:@"pushNotification" 
    object:self]; 
} 

가 그럼 난 내 특정의 ViewController이 추가 :

둘째, 내 응용 프로그램 위임에이 방법을 추가

- (void)pushNotificationClicked:(NSNotification *) notification { 

if ([[notification name] isEqualToString:@"pushNotification"]){ 
    //do whatever you want 
} 
} 

이렇게하면 사용자가 허용 또는 허용하지 않을 때 콜백을받습니다.

관련 문제