2015-01-28 3 views
0

나는 어떤 종류의 UIUserNotificationType을 수신해야하는지에 관해서 iOS 8의 푸시 알림에 예상되는 동작을 얻고 있습니다. registerUserNotificationSettings : 및 registerForRemoteNotifications에서 예기치 않은 동작이 발생했습니다.

내가 실행 한 테스트

은 다음과 같다 :

UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert; 
UIUserNotificationSettings *mySettings = [UIUserNotificationSettings settingsForTypes:types categories:nil]; 

UIApplication *sharedApplication = [UIApplication sharedApplication]; 
[sharedApplication registerUserNotificationSettings:mySettings]; 
[sharedApplication registerForRemoteNotifications]; 

I 예상 UIApplicationDelegate 통화를 얻고 나는 푸시 알림을 보낼 때 예상대로, 내가 경고를받을 수 있습니다. 여기까지 괜찮아.

그럼, 원격 알림의 등록을 취소 :

[[UIApplication sharedApplication] unregisterForRemoteNotifications]; 

그리고 위와 같은 코드를 실행하지만,이 경우에, 나는 다시 모든 예상 얻을 registerUserNotificationSettings:

UIApplication *sharedApplication = [UIApplication sharedApplication]; 
[sharedApplication registerForRemoteNotifications]; 

호출하지 않습니다 UIApplicationDelegate가 호출하지만 동일한 푸시 알림을 보낼 때 장치에 경고가 표시되고 올바르지 않다고 생각합니다. 앱의 원격 알림, 경고를 표시 사운드를 재생하거나 다른 사용자가 직면하고 작업을 수행하려는 경우, 당신은을 호출해야합니다

: 나는하여 documentation 말한대로 내가 어떤 경고, 사운드 또는 배지를하지한다고 생각합니다 registerUserNotificationSettings : 사용하려는 알림 유형을 요청하는 메소드입니다. 이 메서드를 호출하지 않으면 시스템은 모든 원격 알림을 앱에 자동으로 전달합니다.

UIApplication *sharedApplication = [UIApplication sharedApplication]; 
[sharedApplication registerForRemoteNotifications]; 

을 그리고 예상대로 그 경우에 나는 어떤 경고를하지 않았다 : 그 한 번 확인

, 나는 다른 장치에 바로 두 번째 조각을 실행했다.

정상적인 동작입니까? 등록을 취소하면 다음 등록 (이 경우 환경 설정 없음)에서 표시되는 환경 설정이 우선 적용되지만 registerUserNotificationSettings:이 호출되지 않으면 이전 설정이 어딘가에 캐시되고 어떤 종류의 알림이 전달되는지 결정하는 것으로 보입니다. 앱에

+0

예, 실제로 푸시 알림 설정이 기기에 캐시됩니다 (예 : 24 시간 내에 푸시 알림을 수락하도록 팝업 알림을받을 수없는 이유). 그러나 등록을 취소해야하는 이유가 확실하지 않습니다. 나는 그럴 필요가있는 좋은 사례를 찾지 못했습니다. –

+0

앱을 제거하고 두 번째 코드 단편 (registerUserNotificationSettings를 호출하지 않은 코드)을 실행 한 후에도 푸시 알림을 받고 있었기 때문에 등록 취소를 시도했습니다. PN 설정이 장치에 캐시 된 경우 해당 캐시를 지우려면 응용 프로그램을 제거 할 것으로 예상되지만 그럴 것 같지 않습니다. – jjramos

답변

1

원하는 동작을 얻으려면 유형이없는 설정으로 registerUserNotificationSettings를 호출해야합니다. 이렇게하면 캐시 된 설정을 덮어 쓰게됩니다. 이처럼 :

UIUserNotificationType types = UIUserNotificationTypeNone; 
UIUserNotificationSettings *mySettings = [UIUserNotificationSettings settingsForTypes:types categories:nil]; 

UIApplication *sharedApplication = [UIApplication sharedApplication]; 
[sharedApplication registerUserNotificationSettings:mySettings]; 
[sharedApplication registerForRemoteNotifications]; 

당신은 사용자 알림 설정을 다시 구성하지 않으면

는 캐시 된 값 (즉, 당신이 발견 한 것처럼, 응용 프로그램의 재설치를 지속)이 사용됩니다.

+0

답해 주셔서 감사합니다. 제 질문은 특히 뭔가를 성취하려고 시도하는 것보다 예상치 못한 행동이라고 생각하는 것에 관한 것입니다. 그러나 캐싱 문제가 가장 가능성이 보인다. – jjramos

관련 문제