使用WatchKit和Widget更新应用程序徽章(今日扩展)?

时间:2016-01-28 14:24:45

标签: ios objective-c watchkit ios8-today-widget today-extension

在我的应用中,我目前使用此代码运行某些事件后更新应用程序徽章:

[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];

然而,无法从WatchKit或Widget调用[UIApplication sharedApplication]。我的小部件有没有办法通过其他方式更新应用程序徽章?

我尝试使用像这样的后台提取。当我从Xcode明确地“模拟背景提取”时,徽章会更新。但在实际设备上,后台提取永远不会被调用?另一个想法是调用后台提取命令?

- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    // Background Fetch
    [[GlobalNotifications sharedInstance] setApplicationBadge];
    completionHandler(UIBackgroundFetchResultNewData);
}

感谢您对此有任何见解。

1 个答案:

答案 0 :(得分:0)

您是正确的,只能从iOS主应用程序调用scheduleLocalNotification。对于手表应用程序,如果您使用的是watchOS 2,则可以告诉iOS应用程序使用WatchConnectivity在后台安排通知。我建议使用WCSession方法sendMessage来安排通知。

在watchOS 1中,您可以使用openParentApplication方法:

// On the watch extension
[InterfaceController openParentApplication:request reply:^(NSDictionary *replyInfo, NSError *error) {
    // handle response from phone
}];

// In the AppDelegate of the phone:
- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply 
    // TODO: Schedule notification here...
    NSDictionary *response = // Your custom response
    reply(response);
}

我不知道如何通过其他类型的应用扩展程序(例如今天的扩展程序)与父应用程序进行此类通信。