Как заменить метод UIRemoteNotificationTypeVoip на метод setKeepAliveTimeout?

В моем проекте XCode я использовал метод setKeepAliveTimeout в методе applicationDidEnterBackground, как показано ниже.

- (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?

Если кто знает, то дайте мне ответ.

Заранее спасибо!


person Nandhakumar Kittusamy    schedule 28.12.2016    source источник
comment
Вы работаете над приложением на основе VOIP? затем setKeepAliveTimeout поможет только в фоновом состоянии. Если вы хотите, чтобы ваше приложение на основе VOIP работало и в прекращенном состоянии, вам необходимо интегрировать Pushkit.   -  person Hasya    schedule 19.01.2017
comment
Только его приложение на основе VOIP, но метод setKeepAliveTimeout от Apple теперь устарел. Вместо метода setKeepAliveTimeout они ввели метод UIRemoteTypeNotificationVoip. Итак, я хочу, чтобы реализовать метод UIRemoteTypeNotificationVoip.   -  person Nandhakumar Kittusamy    schedule 19.01.2017
comment
setKeepAliveTimeout или UIRemoteTypeNotificationVoip, ваше приложение не будет работать для целей VOIP в прекращенном состоянии. вы должны работать с Pushkit. См. github.com/hasyapanchasara/PushKit_SilentPushNotification.   -  person Hasya    schedule 19.01.2017
comment
если входящий звонок происходит в приложение, для этого работает pushkit?   -  person Nandhakumar Kittusamy    schedule 19.01.2017
comment
С помощью полезной нагрузки pushkit вы можете запланировать локальное уведомление. когда приходит полезная нагрузка pushkit, ваше приложение будет активным в фоновом или завершенном состоянии до воспроизведения вашего локального звука уведомления. вы также можете хранить детали в NSUserDefault. поэтому при интерактивном локальном уведомлении или завершении работы с опцией вы можете делать все, что хотите.   -  person Hasya    schedule 19.01.2017
comment
Получите всю процедуру шаг за шагом из моего ответа. Не забудьте принять ответ, если он вам помог.   -  person Hasya    schedule 19.01.2017
comment
Давайте продолжим обсуждение в чате.   -  person Nandhakumar Kittusamy    schedule 19.01.2017


Ответы (1)


Используйте приведенную ниже структуру для достижения вашей задачи.

Некоторые ссылки

https://github.com/hasyapanchasara/PushKit_SilentPushNotification

введите здесь описание изображения

введите здесь описание изображения

Используйте этот файл simplepush.php

Используйте команды ниже, чтобы создать файл pem и использовать его в приведенном выше коде.

После этого перейдите в папку simplepush.php и выполните команду fire -> php simplepush.php.

Таким образом, вы можете протестировать архитектуру настройки push-уведомлений.

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

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

Загрузить

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. поэтому при интерактивном локальном уведомлении или завершении работы с опцией вы можете делать все, что хотите.

person Hasya    schedule 19.01.2017
comment
не могли бы вы изменить этот код на объективный c @hashya - person Nandhakumar Kittusamy; 19.01.2017
comment
Что-то может вам помочь, см. stackoverflow .com/questions/27245808/ - person Hasya; 19.01.2017
comment
оно работает! Я переопределяю методы методов CallKit в свой AppDelegate.m и получаю токен устройства с помощью PKPushRegistry из APN. Он отлично работает в моем приложении VOIP. - person Nandhakumar Kittusamy; 09.08.2017