相关疑难解决方法(0)

无声推送未在iOS 11上传送到应用程序

我注意到在iOS 11 beta 2上,application:didReceiveRemoteNotification:fetchCompletionHandler无论应用程序的状态如何(背景/前景),都不会传递静默通知.

我实现了该UIApplicationDelegete方法,application:didReceiveRemoteNotification:fetchCompletionHandler并发送以下静默推送

{  
  "aps": {  
    "content-available": 1  
  },  
  "mydata": {  
    "foo": "bar"  
  }  
} 
Run Code Online (Sandbox Code Playgroud)

但是在iOS 11上没有调用委托方法.

它在其他版本的iOS上工作正常,文档部分配置静默通知没有提到应该做的任何其他事情.

这是iOS 11中的错误还是我错过了iOS 11中的新功能?

请注意,我不是在讨论或使用UserNotification发送静默推送所不需要的框架.

这是一个说明问题的示例项目(您必须设置自己的包ID)

当您在示例项目中进行午餐并将上述有效负载发送到应用程序时,您可以使用macOS控制台查看推送是否已正确传递到设备,而不是应用程序.

更新10.08

看来行为是随机的.有时在重新启动设备后,有效负载会正确传送,但一段时间后它会停止工作.

正如您在下面的屏幕截图中看到的那样,标记为1的推送仅对设备进行了延迟,并且推送2(设备重启后)也会传送到应用程序.

在此输入图像描述

更新14.08 - iOS 11 Beta 6

还是一样的行为.应该起作用的另一件事但不是以下.当应用程序的方案设置为"等待可执行文件启动"时,静音推送应该唤醒应用程序并在后台启动它.

在此输入图像描述

更新21.08 - iOS 11 Beta 7

在错误报告中仍然是Apple的相同行为而不是更新.

更新29.08 - iOS 11 Beta 8

仍然是同样的问题.我现在使用的重现步骤如下:

  • 在Xcode项目方案中,选择"等待可执行文件启动"
  • 在中添加断点 didReceiveRemoteNotification: fetchCompletionHandler
  • 在设备上启动应用
  • 发送上面的静音推送

预期:应用程序从暂停状态进入后台并被didReceiveRemoteNotification: fetchCompletionHandler调用

实际:没有任何反应

更新06.09 - iOS 11 Beta …

push-notification ios ios11

158
推荐指数
7
解决办法
3万
查看次数

记录更新时CloudKit推送通知停止工作

编辑:今天在2015年8月27日重新测试,它再次运作,苹果已修复它.

我有一个处于开发模式的应用程序.该应用程序使用CKSubscription来获取服务器上的更改通知,为所有三个选项配置:创建,更新,删除.一切都运行正常但最近在回归测试期间我发现应用程序没有收到有关记录更新的通知,创建和删除通知仍然有效.正如我在仪表板上检查的那样,所有三个选项都正确设置了susbcription类型,并且应用程序已注册CKSubscription,因为它是在几天前工作时才像魅力一样.我没有收到CloudKit的任何错误.重置开发环境没有帮助.我已经重新测试了我确信它正在工作的版本,并得到了相同的结果.

知道可能导致这个问题的原因,我还应该检查/尝试什么?

附加信息: 我猜服务器端可能出现问题.我没有更改我订阅CloudKit事件和处理推送通知的代码中的任何内容 - 无论如何,它正在工作的版本不再获得更新通知.我正在处理的应用程序已发布,因此更改容器是不行的.不确定这是否会导致问题,只是想提一下:应用程序使用相同的容器将核心数据存储在云中 - 应用程序升级的目标是将数据迁移到CloudKit并将其用作云专门存储.令人困惑的是,一切都运行良好数周并突然停止工作,没有任何明确的原因,可能是因为密集测试的负载效应,添加记录类型......

使用从头开发的应用程序测试: 我编写了一个简单的测试应用程序来检查接收通知.我只能收到有关创建记录的通知.我的代码出了什么问题:

import UIKit
import CloudKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

let container = CKContainer.defaultContainer()

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

    let settings = UIUserNotificationSettings(forTypes: .Alert, categories: nil)
    application.registerUserNotificationSettings(settings)
    application.registerForRemoteNotifications()

    return true
}

func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) {
    println("didFailToRegisterForRemoteNotificationsWithError: \(error)")
}

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
    println("didRegisterForRemoteNotificationsWithDeviceToken: \(deviceToken)")
    subscribe()
}

func subscribe() {
//        let predicate = NSPredicate(format: …
Run Code Online (Sandbox Code Playgroud)

apple-push-notifications ios cloudkit cksubscription

6
推荐指数
1
解决办法
694
查看次数

CloudKit订阅CKSubscriptionOptionsFiresOnRecordUpdate不起作用

我创建了一个创建和更新订阅.创作总是很完美,我从其他设备获得推送通知.更新发送到iCloud,您可以在那里看到它们,但推送通知不会传递给设备.

- (void)subscribeWithType:(NSString*)type completionHandler:(void(^)(CKSubscription *))completionHandler
{
    if (self.enabled == NO || _available == NO || _reachability.currentReachabilityStatus != ReachableViaWiFi)
    {
        if (completionHandler)
        {
            dispatch_async(dispatch_get_main_queue(), ^{
                completionHandler(nil);
            });
        }
        return;
    }

    NSPredicate *truePredicate = [NSPredicate predicateWithValue:YES];

    CKSubscriptionOptions options = CKSubscriptionOptionsFiresOnRecordCreation | CKSubscriptionOptionsFiresOnRecordUpdate;

    CKSubscription *subscription = [[CKSubscription alloc] initWithRecordType:type
                                                                    predicate:truePredicate
                                                               subscriptionID:[CTUtils GetUUID]
                                                                      options:options];

    CKNotificationInfo *notification = [[CKNotificationInfo alloc] init];
    notification.shouldSendContentAvailable = YES;

    notification.alertLocalizationKey = @"";
    notification.shouldBadge = NO;

    subscription.notificationInfo = notification;

    CKModifySubscriptionsOperation *operation = [[CKModifySubscriptionsOperation alloc] initWithSubscriptionsToSave:@[subscription] subscriptionIDsToDelete:nil];

    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);

    __block …
Run Code Online (Sandbox Code Playgroud)

push-notification apple-push-notifications ios cloudkit cksubscription

6
推荐指数
0
解决办法
385
查看次数