如何用 setKeepAliveTimeout 方法替换 UIRemoteNotificationTypeVoip 方法?

Posted

技术标签:

【中文标题】如何用 setKeepAliveTimeout 方法替换 UIRemoteNotificationTypeVoip 方法?【英文标题】:How to replace UIRemoteNotificationTypeVoip method with setKeepAliveTimeout method? 【发布时间】:2016-12-28 12:39:13 【问题描述】:

在我的 XCode 项目中,我在applicationDidEnterBackground 方法中使用了setKeepAliveTimeout 方法,如下代码所示。

- (void)applicationDidEnterBackground:(UIApplication *)application

    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
    [self performSelectorOnMainThread:@selector(keepAlive) withObject:nil waitUntilDone:YES];

    [application setKeepAliveTimeout:600 handler: ^
    [self performSelectorOnMainThread:@selector(keepAlive) withObject:nil waitUntilDone:YES];
    ];

这表明setKeepAliveTimeout方法已被弃用,他们想使用UIRemoteNotificationTypeVoip方法。

我搜索了UIRemoteNotificationTypeVoip 方法,但没有给出足够的结果。即使developer.apple.com 也没有该方法的文档。

问题:如何更改UIRemoteNotificationTypeVoip 使用setKeepAliveTimeout 的位置?

如果有人知道,请给我一个答案。

提前致谢!

【问题讨论】:

您正在开发基于 VOIP 的应用程序吗?那么 setKeepAliveTimeout 将仅在后台状态下提供帮助,如果您希望基于 VOIP 的应用程序也可以在终止状态下工作,那么您需要集成 Pushkit。 仅基于 VOIP 的应用程序,但苹果现在已弃用 setKeepAliveTimeout 方法。他们引入了 UIRemoteTypeNotificationVoip 方法,而不是 setKeepAliveTimeout 方法。所以我想知道如何实现 UIRemoteTypeNotificationVoip 方法。 setKeepAliveTimeout 或 UIRemoteTypeNotificationVoip,您的应用在终止状态下将无法用于 VOIP 目的。你必须使用 Pushkit。见github.com/hasyapanchasara/PushKit_SilentPushNotification 如果app有来电,pushkit可以解决吗? 通过 pushkit 有效负载,您可以安排本地通知。当 pushkit 有效负载到来时,您的应用程序将在后台激活或终止状态,直到您的本地通知声音播放。您还可以在 NSUserDefault 中保留详细信息。等等交互式本地通知或使用选项完成启动,您可以做任何您想做的事情。 【参考方案1】:

使用下面的结构来完成你的任务。

一些参考

https://github.com/hasyapanchasara/PushKit_SilentPushNotification

使用这个 simplepush.php 文件

使用以下命令创建 pem 文件并在上面的代码中使用它。

之后转到 simplepush.php 位置并触发命令 -> php simplepush.php

这样您可以测试您的推送工具包通知设置架构。

https://zeropush.com/guide/guide-to-pushkit-and-voip

https://www.raywenderlich.com/123862/push-notifications-tutorial

Download

import UIKit
import PushKit


class AppDelegate: UIResponder, UIApplicationDelegate,PKPushRegistryDelegate



func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 


    let types: UIRemoteNotificationType = [.Alert, .Badge, .Sound]
    application.registerForRemoteNotificationTypes(types)

    self. PushKitRegistration()

    return true




//MARK: - PushKitRegistration

func PushKitRegistration()


    let mainQueue = dispatch_get_main_queue()
    // Create a push registry object
    if #available(ios 8.0, *) 

        let voipRegistry: PKPushRegistry = PKPushRegistry(queue: mainQueue)

        // Set the registry's delegate to self

        voipRegistry.delegate = self

        // Set the push type to VoIP

        voipRegistry.desiredPushTypes = [PKPushTypeVoIP]

     else 
        // Fallback on earlier versions
    





@available(iOS 8.0, *)
func pushRegistry(registry: PKPushRegistry!, didUpdatePushCredentials credentials: PKPushCredentials!, forType type: String!) 
    // Register VoIP push token (a property of PKPushCredentials) with server

    let hexString : String = UnsafeBufferPointer<UInt8>(start: UnsafePointer(credentials.token.bytes),
        count: credentials.token.length).map  String(format: "%02x", $0) .joinWithSeparator("")

    print(hexString)





@available(iOS 8.0, *)
func pushRegistry(registry: PKPushRegistry!, didReceiveIncomingPushWithPayload payload: PKPushPayload!, forType type: String!) 
    // Process the received push
    // From here you have to schedule your local notification




通过 pushkit 有效负载,您可以安排本地通知。当 pushkit 有效负载到来时,您的应用程序将在后台激活或终止状态,直到您的本地通知声音播放。您还可以在 NSUserDefault 中保留详细信息。因此,在交互式本地通知或使用选项完成启动时,您可以做任何您想做的事情。

【讨论】:

能否请您将此代码修改为objective c @hashya 有什么可以帮到你的,见***.com/questions/27245808/… 它有效!我将 CallKit 方法的方法覆盖到我的 AppDelegate.m 中,并使用来自 APNs 的 PKPushRegistry 获取设备令牌。它在我的 VOIP 应用程序中完美运行。

以上是关于如何用 setKeepAliveTimeout 方法替换 UIRemoteNotificationTypeVoip 方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何用spss 做卡方检验

如何用spss做卡方检验时计算OR值

如何用spss做卡方检验时计算OR值?

如何用spss做卡方检验时计算OR值?

如何用spss做卡方检验时计算OR值

如何用get方post方式向http接口发送数据