- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用以下 CKNotification 信息,这似乎工作正常:
CKNotificationInfo *note = [[CKNotificationInfo alloc] init];
note.alertBody = @"发生了什么事";
注意.shouldBadge = NO;
note.shouldSendContentAvailable = NO;
当 iOS 设备上发生某些变化时,我的 Mac 应用程序会收到基于此通知的订阅的推送通知。但是,didReceiveRemoteNotification
从未被调用,因此我无法处理该事件。我需要能够刷新并获取新的更改。我该怎么做?
最佳答案
调用registerForRemoteNotificationTypes:
并实现didRegisterForRemoteNotificationsWithDeviceToken:
应该有足够的代码,并且应用程序 ID 应包含推送通知服务。
我在跨平台 (iOS/OS X) 应用程序中使用 CloudKit 在设备之间同步收藏夹,如下所示:
// OS X specific code
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
[NSApp registerForRemoteNotificationTypes:NSRemoteNotificationTypeNone];// silent push notification!
}
- (void)application:(NSApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
[self.favCon handleCloudKitNotificationWithUserInfo:userInfo];
}
请注意 NSRemoteNotificationTypeNone
的用法,这意味着静默推送通知!这就是我在 FavController 类中设置 CloudKit 的方法:
- (void)getOrCreateFavZoneWithCompletionHandler:(successCompletionHandler)handler {
// check if FavZone exists op
__block int createZone = 0;
CKFetchRecordZonesOperation *fetchRecZonesOp = [[CKFetchRecordZonesOperation alloc] initWithRecordZoneIDs:@[[FavController favRecordZoneID]]];
CKModifyRecordZonesOperation *saveRecZoneOp = [[CKModifyRecordZonesOperation alloc] initWithRecordZonesToSave:nil recordZoneIDsToDelete:nil];
fetchRecZonesOp.fetchRecordZonesCompletionBlock = ^(NSDictionary *recordZonesByZoneID, NSError *operationError) {
if (recordZonesByZoneID.count == 0) {// zone doesn't exist
createZone = 1;
CKRecordZone *favZone = [[CKRecordZone alloc] initWithZoneName:UTXAFavZoneName];
saveRecZoneOp.recordZonesToSave = @[favZone];
NSLog(@"Creating new Zone %@", favZone.zoneID.zoneName);
} else {
NSLog(@"Zone %@ already exists.", [FavController favRecordZoneID].zoneName);
}
};
// create FavZone op
saveRecZoneOp.modifyRecordZonesCompletionBlock = ^(NSArray *savedRecordZones, NSArray *deletedRecordZoneIDs, NSError *operationError) {
[self successCompletionHandler:(savedRecordZones.count == createZone) error:operationError informDelegate:YES handler:handler];
};
[saveRecZoneOp addDependency:fetchRecZonesOp];
[[FavController favDatabase] addOperation:fetchRecZonesOp];
[[FavController favDatabase] addOperation:saveRecZoneOp];
}
- (void)subscribeToFavChanges:(successCompletionHandler)handler {
// get current subscription
[[FavController favDatabase] fetchSubscriptionWithID:UTXAFavConCKSubscriptionID completionHandler:^(CKSubscription *subscription, NSError *error) {
if (subscription) {
NSLog(@"using existing subscription: %@", subscription);
[self successCompletionHandler:YES error:nil informDelegate:NO handler:handler];
} else {
CKSubscription *sub = [[CKSubscription alloc] initWithZoneID:[FavController favRecordZoneID]
subscriptionID:UTXAFavConCKSubscriptionID
options:0];// "You must specify 0 for this parameter. Zone subscriptions currently do not support any options."
[[FavController favDatabase] saveSubscription:sub completionHandler:^(CKSubscription *subscription, NSError *error) {
NSLog(@"created new subscription: %@ %@", subscription, error);
[self successCompletionHandler:(error == nil) error:error informDelegate:YES handler:handler];
}];
}
}];
}
一旦我在一台设备上添加或删除记录,我就会在所有其他设备上收到通知,我会像在 FavController 类中那样处理该通知:
/// @abstract Handle push notifications sent by iCloud.
/// @discussion App delegates call this method when they receive a push notification through didReceiveRemoteNotification.
/// Currently, only airport favorites produce a PN, it is of type CKNotificationTypeRecordZone.
/// @param userInfo The userInfo dict tied to each push notification.
- (void)handleCloudKitNotificationWithUserInfo:(NSDictionary *)userInfo {
[self recursivelyCheckForPreviousCloudKitNotifications];
}
- (void)recursivelyCheckForPreviousCloudKitNotifications {
CKFetchNotificationChangesOperation *fetchOp = [[CKFetchNotificationChangesOperation alloc] initWithPreviousServerChangeToken:_defCon.notificationChangeToken];
__weak CKFetchNotificationChangesOperation *weakOp = fetchOp;
fetchOp.notificationChangedBlock = ^(CKNotification *notification) {
[self handleNotification:notification];
};
fetchOp.fetchNotificationChangesCompletionBlock = ^( CKServerChangeToken *serverChangeToken, NSError *operationError) {
NSLog(@"new notification change token: %@", serverChangeToken);
_defCon.notificationChangeToken = serverChangeToken;
if (weakOp.moreComing) {
NSLog(@"more coming!!");
[self recursivelyCheckForPreviousCloudKitNotifications];
} else {
NSLog(@"done handling notification changes.");
}
};
[[FavController favContainer] addOperation:fetchOp];
}
- (void)handleNotification:(CKNotification *)notification {// withCompletionHandler:(successCompletionHandler)handler {
if (notification.notificationType == CKNotificationTypeRecordZone) {// make sure we handle only zone changes
CKRecordZoneNotification *noti = (CKRecordZoneNotification *)notification;
if ([noti.recordZoneID.zoneName isEqualToString:[FavController favRecordZoneID].zoneName]) {
// received an update for the fav zone
[self queuedFavUpdateFromCloud];
} else {
// received an update for an unknown zone
NSLog(@"WARNING: received an update for an unknown zone: %@", noti.recordZoneID.zoneName);
}
} else {
NSLog(@"WARNING: received unknown notification: %@", notification);
}
}
关于macos - Mac 上未调用 CloudKit didReceiveRemoteNotification,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32130206/
在我的应用程序中,我有两种类型的推送通知:带有 content-available = 1 标志的远程静默通知和带有 body、badge< 的普通推送通知 和其他东西。 我还定义了两个委托(dele
如果我覆盖 override func application(application: UIApplication, didReceiveRemoteNotification userInfo: [
我对apns问题感到疯狂。 我正在测试 apns 推送通知。我可以很好地收到推送消息。 但是现在出了大问题。我想告诉我的情况如下。 当我的应用程序运行时,didReceiveRemoteNotific
此类问题已被问过多次,但我遇到了一些具体情况。 当我的应用程序处于事件状态并且收到推送消息时,我能够成功解析自定义负载等。 但是,当我的应用程序在后台并且推送到达时,用户必须单击“查看/打开”按钮才能
我已经使用 FCM 实现了推送通知。当我的应用程序位于前台并且通知到达时,将调用 didReceiveRemoteNotification 方法,但当应用程序未处于事件状态时,它不会调用此方法 当应用
我正在做项目,因为推送通知是关键功能之一。当我在应用程序中时它工作正常,我收到通知并处理该通知。 但问题是当我的应用程序处于非事件状态或删除应用程序的实例时。在这种情况下,我收到了未调用 didRec
我正在使用 firebase 云消息传递通过自定义 JSON 负载实现推送通知,并且它正在运行。 我现在面临的问题是当我触发通知时,didRecieve 被调用,当用户点击通知警报时,它会再次被调用。
我的应用程序委托(delegate)有一个 RootViewController *viewController;应用程序将以此 View 启动。 从现在开始,当用户导航到应用内的不同功能时,我将继续
应用程序委托(delegate)之外有类似的东西吗?我只是希望在收到通知时能够在 View Controller 中执行某些操作。我是否只需导入它们中的每一个并根据我当前的 View Controll
实时应用程序发生崩溃。我无法获取崩溃日志。我可以在“管理器”->“崩溃”中看到以下内容,单击它会将我带到下面提到的以下行。如何调试或防止此崩溃? Crash in Organizer func app
我正在尝试使用 Apple 推送通知。除了应用程序处于后台时之外,一切正常。 回调方法DidRecieveRemoteNotification有时不会在收到通知后立即调用。有时需要超过 5 分钟才能调
我目前正在开发一个需要调整 AppDelegate 应用程序的产品:didReceiveRemoteNotification:(我不想在 appDelegate 本身中调用我的新方法)。 问题是:调配
似乎如果我同时向同一设备发送多个推送通知,则不会为每个发送的通知调用 didReceiveRemoteNotification。假设我发送了 6 个通知,didReceiveRemoteNotific
我已经在我的应用程序中实现了推送通知。 当我的应用程序在前台时,我的应用程序运行正常。 但是当应用程序在后台或被杀死时,我的 didReceiveRemoteNotification 调用了两次。 我
我正在处理推送通知,我收到的数据是 JSON 格式的。如何解析 JSON 数据,如下面的通知中心所示: 最佳答案 如果您的应用处于后台/前台模式,请调用此方法 - (void)application:
我已经实现了我的 didReceiveRemoteNotification 方法。它工作并显示一个 View Controller ,其中包含传递的通知数据。这仅在应用程序已经在前台或在后台运行时才有
我正在开发一个包含大量遗留代码的大型应用程序。目前 - 有一个实现: - (void) application:(UIApplication *)application didReceiveRemot
我的应用配置为支持静默推送(内容可用),还支持后台获取。我需要实现的是在收到静默推送后,我需要向服务器发送 ajax 请求,取回数据并保存(使用 CoreData 保存)。 当然,所有这一切都是在用户
我正在尝试从 didReceiveRemoteNotification 生成一个联合发布者 类似于下面的这段代码: NotificationCenter.default.publisher(for:
由于某种原因,我的 didReceiveRemoteNotification 从未被调用。我已完成以下操作: APNS list : 创建允许推送通知的 AppId 使用有效证书和应用 ID 创建 S
我是一名优秀的程序员,十分优秀!