Apple Watch 和 openParentApplication 在后台
Posted
技术标签:
【中文标题】Apple Watch 和 openParentApplication 在后台【英文标题】:Apple Watch and openParentApplication in background 【发布时间】:2014-12-17 18:01:41 【问题描述】:我正在实现一个苹果手表。在我的 Watchkit 扩展中,我使用该方法与“主应用程序”进行通信。
[WKInterfaceController openParentApplication:applicationData reply:^(NSDictionary *replyInfo, NSError *error) ];
根据苹果documentation,应用可以在后台处理请求。
When you call the openParentApplication:reply: method, ios launches or
wakes up the parent app in the background and calls the
application:handleWatchKitExtensionRequest:reply:method of its app delegate.
但是我的应用程序总是处于活动状态,即使我在方法中没有代码 handleWatchKitExtensionRequest
如果可能的话,有什么建议吗?
提前致谢
【问题讨论】:
【参考方案1】:根据 Apple 开发者论坛上 Apple 开发人员的官方回复,这是 WatchKit 框架 Beta 2 中的错误。
https://devforums.apple.com/message/1082689#1082689
为了澄清一件事,iPhone 应用程序是在 背景。在模拟器中,当前正在启动该应用程序 前景。这将不是设备上的体验。这 文档特别指出,“调用该方法会导致 iOS 在后台启动应用程序..."。
(帖子编号 6)
顺便说一句,昨天发布了 Beta 3,也许它已经修复了。
如果 iPhone 被锁定,您的 iOS 应用也会在后台启动。
【讨论】:
感谢您的信息...我会检查它 发行说明(Beta 3)- WKInterfaceController 方法 openParentApplication:reply:现在在 iPhone(或 iOS 模拟器)解锁或锁定时在后台启动包含的应用程序。【参考方案2】:如果您的应用未激活,openParentApplication 将无法激活它。它只能在后台执行任务。为此,请务必按照documentation 中的指定在handleWatchKitExtensionRequest
中启动后台任务。这可确保 iPhone 上的主应用程序在发送回复之前不会暂停。
iPhone 上主应用的应用委托中的代码:
- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void ( ^)( NSDictionary * ))reply
__block UIBackgroundTaskIdentifier watchKitHandler;
watchKitHandler = [[UIApplication sharedApplication]
beginBackgroundTaskWithName:@"backgroundTask"
expirationHandler:^
watchKitHandler = UIBackgroundTaskInvalid;
];
if ([[userInfo objectForKey:@"request"] isEqualToString:@"getData"])
// get data
// ...
reply( data );
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)NSEC_PER_SEC * 1), dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
[[UIApplication sharedApplication] endBackgroundTask:watchKitHandler];
);
【讨论】:
【参考方案3】:我认为主应用的“功能”部分缺少后台模式,以后会添加。
我尝试打开所有当前支持的后台模式,但它们都不起作用(即主应用程序总是在启动)。
我的建议 - 耐心等待下一个测试版。
【讨论】:
【参考方案4】:我在将 WatchKit 固定到现有应用程序时遇到了完全相同的问题。我在 info.plist 中将UIApplicationExitsOnSuspend
(又名应用程序不在后台运行)设置为YES
。将其更改为NO
,错误就会消失。
【讨论】:
以上是关于Apple Watch 和 openParentApplication 在后台的主要内容,如果未能解决你的问题,请参考以下文章