即使应用程序未运行也显示警报

Posted

技术标签:

【中文标题】即使应用程序未运行也显示警报【英文标题】:Show an alert even when the app is not running 【发布时间】:2017-05-10 12:39:00 【问题描述】:

我正在做一个应用程序,我希望用户在应用程序没有运行时也能收到通知。就像在优步司机应用程序中一样,系统会提醒用户接受/拒绝乘车请求。 VoIP 和 PushKit 可以做到这一点吗?最好的方法是什么?

【问题讨论】:

你必须在 ios 中使用通知。有两种 1.远程通知 2.本地通知 看这个链接ndeveloper.apple.com/notifications 您已经回答了自己的问题,是的,您应该使用推送通知。我想您要问的真正问题是推送通知的最佳方式是什么? @Gagan_iOS。非常感谢。推送通知不是我需要的。正如我提到的,这个要求就像在优步司机应用程序中一样。与普通推送通知不同,即使应用程序甚至没有运行,用户也可以看到警报。 你可以去本地通知,它会满足你的要求。查看此链接以获取本地通知code.tutsplus.com/tutorials/… @Gagan_iOS 再次感谢。我认为 PushKit 和 VoIP 可以做到这一点。 developer.apple.com/library/content/samplecode/Speakerbox/…. 【参考方案1】:

是的,这可以通过 pushkit 静默通知实现。

收到推送工具包有效负载后,您必须安排本地通知。

您可以使本地通知与接受/拒绝乘车请求交互,并在点击事件时执行适当的操作,如 API 调用、SQLite 等。

参考下面的代码。我已经根据VOIP通话功能起草了这个,您可以根据您的要求起草。

func pushRegistry(registry: PKPushRegistry!, didReceiveIncomingPushWithPayload payload: PKPushPayload!, forType type: String!) 
        // Process the received push

        var arrTemp = [NSObject : AnyObject]()
        arrTemp = payload.dictionaryPayload

        let dict : Dictionary <String, AnyObject> = arrTemp["aps"] as! Dictionary<String, AnyObject>


        if "IfUserHasLoggedInWithApp" // Check this flag then only proceed
                        

            if UIApplication.sharedApplication().applicationState == UIApplicationState.Background || UIApplication.sharedApplication().applicationState == UIApplicationState.Inactive
            

                if "CheckForIncomingCall" // Check this flag to know incoming call or something else
                

                    var strTitle : String = dict["alertTitle"] as? String ?? ""
                    let strBody : String = dict["alertBody"] as? String ?? ""
                    strTitle = strTitle + "\n" + strBody

                    let notificationIncomingCall = UILocalNotification()

                    notificationIncomingCall.fireDate = NSDate(timeIntervalSinceNow: 1)
                    notificationIncomingCall.alertBody =  strTitle
                    notificationIncomingCall.alertAction = "Open"
                    notificationIncomingCall.soundName = "SoundFile.mp3"
                    notificationIncomingCall.category = dict["category"] as? String ?? ""

                    notificationIncomingCall.userInfo = "As per payload you receive"

                    UIApplication.sharedApplication().scheduleLocalNotification(notificationIncomingCall)

                    
                    else
                    
                        //  something else
                    

        
    


请参阅有关 pushkit 集成和有效负载的更多信息。

https://github.com/hasyapanchasara/PushKit_SilentPushNotification

【讨论】:

哈西亚谢谢。我们如何显示本地通知的自定义 UI。通知内容扩展? 这取决于设备设置中通知的设置类型。接受/拒绝这 2 个选项,您可以使用所有 3 种类型。 我们可以在同一个应用程序中同时使用普通推送通知和 VoIP 推送吗?我的意思是我们需要单独处理它们吗? 非常感谢!.. B/w 我们是否应该在后端保留单独的配置以进行正常推送和 VoIP.. 我的后端配置了亚马逊 SNS。?现在我们有普通推送的普通 apns 令牌和 VoIP 令牌。我们可以使用 VoIP 令牌进行正常推送吗?提前致谢。 感谢您的快速回复。您的意思是我们需要处理这两个令牌吗?

以上是关于即使应用程序未运行也显示警报的主要内容,如果未能解决你的问题,请参考以下文章

如何像闹钟小部件(时钟应用程序)一样显示小部件?

如何使用 UIDatePicker 设置闹钟?

关闭应用后服务不启动警报

如何在正在运行的线程中显示警报对话框?

Xamarin 表单:iPhone 设备中未显示位置权限警报

即使出现警报也隐藏状态栏