iOS APN未收到

时间:2016-06-13 18:57:48

标签: ios swift apple-push-notifications

我有一个奇怪的问题。

以下代码用于注册通知:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // PUSH NOTIFICATION

    let notificationTypes: UIUserNotificationType = [UIUserNotificationType.Alert, UIUserNotificationType.Badge, UIUserNotificationType.Sound]
    let pushNotificationSettings = UIUserNotificationSettings(forTypes: notificationTypes, categories: nil)

    application.registerUserNotificationSettings(pushNotificationSettings)
    application.registerForRemoteNotifications()

处理通知:

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {

    let notification = UILocalNotification()
    notification.soundName = UILocalNotificationDefaultSoundName
    notification.alertBody = "TEST"
    application.presentLocalNotificationNow(notification)

当我在xcode(使用设备,而不是模拟器)中测试这个简单代码时,没有问题。但是当我在没有xcode的情况下测试它时(仅在我的手机上),本地通知不会出现:没有声音,没有警报,没有徽章,没有。

当应用在后台运行时,会出现此问题。

发送的APN是无声通知。

有什么想法来解决它吗?

修改

我通过将无声APN的优先级降低到5来解决它。

4 个答案:

答案 0 :(得分:0)

通过xcode安装时,通知将与开发(gateway.sandbox.push.apple.com)网址一起使用。将其导出为ipa(ad-hoc)并手动安装需要从生产URL gateway.push.apple.com (包括生产密钥)发送通知。因此,您必须创建两个密钥,然后您可以设法在处理xco​​de时使用开发URL发送通知,并在从导出的ipa安装时使用生产发送通知。

答案 1 :(得分:0)

如果您已经通过Xcode运行了一次应用程序,那么您之前已将令牌存储为默认值。因此,当您再次运行它时,registerForRemoteNotifications()将不会被调用,因为您已将其包装在该if语句中。

每次应用启动时都应该调用registerForRemoteNotifications()(并且不要假设令牌是固定值,不是,它可以更改)。

答案 2 :(得分:0)

您的deviceToken将在您编译到生产(ad-hoc)并从Xcode部署时更改。 见answer

答案 3 :(得分:0)

我终于找到了这个问题,请看我的编辑。

当您发送静默APN(表示content-available设置为1)时,APN priority必须为5且不是10