【问题标题】:Display interactive local push notifications on lock screen iOS在锁屏 iOS 上显示交互式本地推送通知
【发布时间】:2015-11-01 13:06:57
【问题描述】:

我已经配置了具有两个操作的本地推送通知类别。推送通知运行良好,我正在 AppDelegate 中的 application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier 方法中处理这些通知。

我现在的问题是如何才能在用户的锁定屏幕上显示此类通知?我对willResignInactive 方法的假设是,在用户锁定设备后,应用程序仍然可以运行至少一段时间。我想要一种在用户锁定设备后恰好触发通知的方法,以便可以从锁定屏幕使用自定义操作。

任何帮助将不胜感激。

【问题讨论】:

  • 只有锁屏是什么意思?如果此人收到通知,无论他在电话上做什么,他都会收到通知。如果手机解锁,它会显示在顶部,如果你决定不点击它,它会直接移动到通知中心。
  • @apptality 我想在用户锁定设备时安排本地通知,以便他们可以通过通知与锁定屏幕上的自定义操作进行交互。

标签: ios cocoa-touch uilocalnotification appdelegate


【解决方案1】:

我认为您无法访问该特定事件,因为它超出了您的应用程序管辖范围,这就是为什么会有 applicationDidBecomeActiveapplicationWillTerminate 等。这些是您的边界,但您可以在 10 分钟后进行计时,然后希望他们锁定手机?或者更准确地说,您可以检查他们是否确实放下了手机,请查看以下答案:

Lock Unlock events iphone

【讨论】:

    【解决方案2】:

    使用来自@apptality 的一些详细信息,我能够使用 Darwin Notifications 来实现这一点。 This answer 解释了如何让通知工作。我使用以下代码来执行此操作:

    在 AppDelegate 的 didFinishLaunchingWithOptions 方法中放置以下代码:

        CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), //center
                                   (void*)self, // observer (can be NULL)
                                   lockStateChanged, // callback
                                   CFSTR("com.apple.springboard.lockcomplete"), // event name
                                   NULL, // object
                                   CFNotificationSuspensionBehaviorDeliverImmediately);
    

    然后使用这个方法来处理通知:

    static void lockStateChanged(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) {
    NSLog(@"event received!");
    if (observer != NULL) {
        AppDelegate *this = (__bridge AppDelegate*)observer;
    
        NSString* notifyName = (__bridge NSString*)name;
    
        if ([notifyName isEqualToString:@"com.apple.springboard.lockcomplete"]) {
            [this localNotificationSetup];
        }
    }
    }
    

    localNotificationSetup 是您注册发送通知的位置。请小心,因为这是一种基于 c 的方法,因此您的大部分 Objective-c 代码都需要更改。然后,您可以使用此方法来处理通知上的操作:

    -(void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification withResponseInfo:(NSDictionary *)responseInfo completionHandler:(void (^)())completionHandler 
    

    要真正完成任何有用的事情,如果您的应用进入睡眠状态,您可能需要在此方法中从 nsuserdefaults 加载数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      • 2014-08-23
      相关资源
      最近更新 更多