【问题标题】:iOS Extension - Detect "extension state changes" (Background/Foreground)iOS 扩展 - 检测“扩展状态更改”(背景/前景)
【发布时间】:2014-10-06 18:08:17
【问题描述】:

我为 iOS8 实现了一个共享扩展。该服务使用 OAuth 进行身份验证。我用于扩展的登录信息与容器应用共享。

问题是:

当我在扩展程序中时,应用程序切换到容器应用程序并注销,然后应用程序切换回包含扩展程序的主机应用程序 - 我如何检测到扩展程序刚刚重新出现?扩展依赖于容器应用和扩展之间的共享数据库中存在的某些信息,但是,当应用注销时,这些数据会被删除。

我尝试注册各种“应用通知”,例如 UIApplicationDidBecomeActiveNotification。然而,正如预期的那样,这些并不需要扩展。

如何检测扩展程序的状态何时发生变化,以便让我的扩展程序在重新出现时更加健壮?

【问题讨论】:

    标签: ios ios8 ios8-extension ios8-share-extension


    【解决方案1】:

    你的主视图控制器类的viewDidAppear:animated: 方法应该在你每次重新进入你的扩展时被调用。当您即将离开时,应致电viewWillDisappear:animated:

    【讨论】:

    • 不幸的是,这不起作用。在这种特殊情况下(带有扩展)不会调用这些函数。
    【解决方案2】:

    NSExtensionContext.h
    

    iOS 8.2 添加了许多通知用于扩展:

    NSExtensionHostDidBecomeActiveNotification
    NSExtensionHostDidEnterBackgroundNotification
    NSExtensionHostWillEnterForegroundNotification
    NSExtensionHostWillResignActiveNotification
    

    【讨论】:

    • iOS 8.0 的解决方案?
    • 我们没有调查过。我们已决定以 8.2+ 为目标并保留它。
    • 你如何实际使用这些?
    • [[NSNotificationCenter defaultCenter] addObserver:self 选择器:@selector(hostIsInForegroundNotification:) name:@"NSExtensionHostDidBecomeActiveNotification" object:nil];不会触发扩展中的选择器。这个答案不起作用。
    • 我注意到的是,第一次将主机带入前台时,活动/前台不会触发。但它们确实会在您访问主机中的共享扩展后触发第二次等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    相关资源
    最近更新 更多