2016-07-18 3 views
2

docs for registerUserNotificationSettings: 상태 : 앱 표시 알림, 사운드를 재생하거나 아이콘 배지 경우필수`registerUserNotificationSettings : '앱 실행주기 중에 호출해야합니까?

, 당신은 다음과 같은 방법으로 사용자에게 경고 할 수있는 권한을 요청하기 위해 출시주기에이 메서드를 호출해야합니다.

앱이 필요하기 전에 푸시 알림을 전송할 권한을 요청하는 것은 무례한 것처럼 보였으므로이 내용을 읽는 데 실망했습니다. 예를 들어 푸시 알림을 전송할 이유가 있기 전에 사용자가 Google 온라인 서비스를 사용하여 계정을 만들어야한다고 생각하는 앱에서 그리고 사용자가 가입을하지 않고 응용 프로그램을 로컬에서 사용하기 때문에 질문 할 이유가 없습니다. 하지만 앱 출시에 대해서만 묻는다면, 사용자가 계정을 만들어야하고, 앱을 종료 한 다음 다시 요청해야합니다. 이상하게 보입니다.

정말 필요한가요? registerUserNotificationSettings:에 대한 호출을 앱의 관련성이 높은 부분에 넣으려고했으나 푸시 알림을 보낼 수있는 권한을 앱에 표시하지 않았습니다. 이것은 iOS 푸시 알림을위한 정책 일 뿐이며 푸시 알림을 보낼 권한을 요청할 때 더 많은 유연성을 줄 수있는 방법이 있습니까?

+1

원할 때마다 질문 할 수 있습니다. 권한 프롬프트가 나타나지 않으면 다른 이유가 있습니다. – dan

+0

@dan에 동의하면 다른 문제가있을 수 있습니다. 그렇지 않으면 언제든지 원할 수 있습니다. –

+0

언제든지 푸시 알림에 등록 할 수 있으며 권한 프롬프트가 즉시 표시되어야합니다. 푸시 알림 코드만으로 샘플 앱을 만들고 작동하는지 확인하십시오. –

답변

2

-registerForNotifications에 대한 초기 호출은 앱 실행주기 중에 호출 할 필요가 없습니다. 그러나 첫 번째 호출 후에는 앱 시작주기 중에 항상 호출되어야합니다.

하나의 광산과 푸시 알림에 사용했던 타사 서비스의 문제가 두 가지있었습니다. 내 문제는 그것이 반환 된 후 -registerForNotifications 호출 한보기 컨트롤러를 해산했다; 비동기로 실행되었음을 알지 못했습니다. 그래서 우리 애플 리케이션 델리게이트에 -application:didRegisterUserNotificationSettings을 추가했습니다. 이 메서드는 사용자가 -registerForNotifications이 나타내는 프롬프트에 응답하면 호출되며 알림을 게시합니다. -registerForNotifications에 전화하기 전에 해당 알림에 대한 수신기를 설정하고 알림을 받으면보기 컨트롤러 만 닫습니다. 대의원이나 지정하는 블록이 있었으면 좋겠다.하지만 그렇지 않다.

는 그리고 아이폰 OS 정말 당신이 application:didFinishLaunchingWithOptions:-registerForNotifications 전화를 원하기 때문에 거기 아니에요 이유 것으로 의심 때문에 비동기 콜백 그냥 애플 대리자의 또 다른 방법이 될하는 것은 당연하다. [푸시 알림을 실제로 받기 위해 앱을 다시 시작해야한다는 사실에 대해 조금 삭제되었습니다. 추가 :] 다른 문제는 푸시 알림을 위해 사용했던 타사 서비스 (여전히 알파 상태 임)가 푸시 알림을 보내지 않는 경우가 많았습니다. 문제가 해결되면 앱 시작 또는 그 이후에 프롬프트가 왔는지 여부에 관계없이 푸시 알림을 승인하는 즉시 작업을 시작했습니다.응용 프로그램 대리인의 -application:didRegisterUserNotificationSettings:에서

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    if NSUserDefaults.standardUserDefaults().boolForKey("registedNotificationSettings") { 
     self.registerForNotifications() 
    } 
    return true 
} 
  • :

    • 애플 리케이션 대리인의 application:didFinishLaunchingWithOptions: 메소드 호출 -registerForNotifications에서 사용자 기본 설정되어있는 경우 : [/ 추가]를

      그래서 여기에 전체 패턴입니다 원격 알림을 구성하고, 사용자 기본값을 저장하고 알림을 게시합니다.

      그리고 물론 우리는 기각 통지 방법을해야합니다

      @IBAction func okayButtonTapped(sender: AnyObject) { 
          NSNotificationCenter.defaultCenter().addObserver(
           self, 
           selector: #selector(didRegisterNotificationSettings(_:)), 
           name: "RegistedNotificationSettings", 
           object: nil 
          ) 
          let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
          appDelegate.registerForNotifications() 
      } 
      
    • : 내보기 컨트롤러에서

    • , 버튼 누름에, 다음 푸시 알림을 보낼 수있는 권한을 요청, 그 통지를 수신 모든 법과, 그것을이 구성

      func didRegisterNotificationSettings(notification: NSNotification) { 
          let status = notification.object as! UIUserNotificationSettings 
          if status.types != .None { 
           // Yay! 
           self.done() 
           return 
          } 
      
          // Tell them a little more about it. 
          NSLog("User declined push notifications") 
          self.done() 
      } 
      

    을 : 사용 권한이 부여하고, 그렇지가있을 때 뭔가 다른 할 필요가있다 뷰 컨트롤러 ks [-registerForNotifications 통화 시간에 대한 잘못된 정보가 삭제됨]이며 앱 시작시 사용자에게 메시지를 표시하지 않습니다.

  • 관련 문제