Configurar las notificaciones push de iOS

En los eventos entrantes, como un nuevo mensaje o una llamada entrante, el usuario suele esperar recibir una notificación push, si la aplicación no está activa.

En el caso de Voice, puedes integrar notificaciones push de VoIP en tu aplicación mediante PushKit y CallKit. En nuestro blog tutorial completo sobre cómo integrar las notificaciones push de VoIP que proyecto de muestra finalizado.

Para Chat, puede integrar Notificaciones a los usuarios en su aplicación. Puedes personalizar el push que recibes de Vonage antes de mostrárselo a tu usuario con un extensión de la aplicación del servicio de notificaciones.

Crear un certificado push

El servicio Apple Push Notifications (APNs) utiliza autenticación basada en certificados para asegurar las conexiones entre los APNs, los servidores de Vonage y los dispositivos finales. Deberás crear un certificado y cargarlo en los servidores de Vonage.

Añadir una función de notificación push

Para utilizar las notificaciones push es necesario añadir la función de notificaciones push al proyecto Xcode. Para ello seleccione su objetivo y seleccione Firma y capacidades:

Signing & Capabilities

A continuación, seleccione añadir capacidad y añada el Notificaciones Push y Modos de fondo capacidades:

Add Capabilities

En la opción Modos de fondo, seleccione Voz sobre IP y Proceso de fondo. Si Xcode gestiona automáticamente la firma de su aplicación, actualizará el perfil de aprovisionamiento vinculado a su identificador de paquete para incluir las capacidades.

Generar un certificado push

Para generar un certificado push, deberá iniciar sesión en su cuenta de desarrollador de Apple y dirigirse a la sección Certificados, identificadores y perfiles y añada un nuevo certificado:

Add certificate button

Elija una Servicio Apple Push Notification SSL (Sandbox y producción) y continuar.

Apple Push Notification service option

Si la opción del servicio Apple Push Notification no está disponible para usted, tendrá que pedir a un administrador de su cuenta de desarrollador Apple developer Account que realice este paso por ti.

Ahora tendrá que elegir el ID de la aplicación a la que desea añadir notificaciones push y continuar. Si su aplicación no aparece en la lista, tendrá que crear un ID de aplicación. Xcode puede hacer esto por usted si automáticamente si gestiona su firma para usted, de lo contrario puede crear un nuevo App ID en el Certificados, identificadores y perfiles página en * Identificadores*. Al hacerlo, asegúrate de seleccionar la función de notificaciones push.

Se le pedirá que cargue una solicitud de firma de certificado (CSR). Puede seguir las instrucciones en Sitio web de ayuda de Apple para crear una CSR en su Mac. Una vez cargado el CSR, podrá descargar el certificado. Haga doble clic en el .cer para instalarlo en Keychain Access.

Para obtener el certificado push en el formato que necesitan los servidores de Vonage, deberás exportarlo. Localiza tu certificado del servicio Apple Push Notification en Acceso a llaveros y haz clic con el botón derecho para exportarlo. Asigna un nombre a la exportación applecert y seleccione .p12 como formato:

Keychain export

Encontrará más información sobre la conexión a APN en Documentación oficial de Apple.

Cargue su certificado

Sube tu certificado a Vonage usando el panel de API. Abre tu aplicación en la sección salpicaderoy, a continuación, abre la pestaña "Activar notificaciones push":

Push Upload on the dashboard

Cargue su certificado, en .p12 del paso anterior y añada una contraseña si es necesario.

Uso del terminal

También puedes cargar tu certificado a través del terminal. Necesitarás tu ID de aplicación de Vonage para cargarlo mediante el terminal terminal, también deberás generar un JWT de administrador de Vonage.

Para generar un JWT de administrador de Vonage, ejecuta el siguiente comando CLI de Vonage. Recuerda reemplazar el campo APPLICATION_ID con ID de tu aplicación de Vonage y PRIVATE_KEY con el nombre de su archivo de clave privada:

# A command with parameters
vonage jwt create `
--app-id='00000000-0000-0000-0000-000000000000' `
--private-key=./private.key

# Will produce a token
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MzYyODE5NDYsImp0aSI6IjBmZjcwZDNmLTAzN2EtNGY4MC04ODZjLWI3MmM3MmQyMWNmMiIsImlhdCI6MTczNjI4MTA0NiwiYXBwbGljYXRpb25faWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAifQ.gA7jClpqaZ2OoS0iri-zGCbda4jO7C0M8mka0EnSyjlds1EeY8fNoBEx3FTXHfkkzzrj0TskrWc_dcs1wuM8Kx55c5rLQ7taVpDAYopKSc_CeeOaad8S6aWnRkTUTNeduO4aIn-0CbyRTluBYsH1RBqYBQvobuQIDEwbFw8xBgx0UfREMMN6DAWknR57eiVXN9x_oD6CGQJ1yV3025nGboeMsP9YgX4Nwc-rE2r8c1ZGwCLO81x8i19Qil3Nwu5q1nzouyavQjIw00B_TZkushnI1ufdi_GNqk-h5q2HvGkg7Pj9bVkZHFdVTO8im03JYNyJmcV83vnpjOLuCFRzxQ

NOTA Un JWT admin es un JWT sin una sub-reclamación. Encontrará más información sobre cómo generar un JWT en la sección guía de autenticación.

A continuación, ejecute el siguiente comando Curl, sustituyendo jwt, applecert.p12, app_id con sus valores:

hexdump -ve '1/1 "%.2x"' < applecert.p12 > applecert.pfx.hex hextoken=`cat applecert.pfx.hex` curl -v -X PUT \ -H "Authorization: Bearer $jwt" \ -H "Content-Type: application/json" \ -d "{\"token\":\"$hextoken\"}" \ https://api.nexmo.com/v1/applications/$app_id/push_tokens/ios

Si ha utilizado una contraseña al exportar el certificado, añádala al cuerpo de la solicitud de la forma siguiente:

-d "{\"password\":\"$PASSWORD\"}" \

Si está actualizando un token existente, elimínelo primero haciendo un DELETE solicitud al mismo con la misma autenticación.

NOTA: No hay validación en este punto final. La dirección 200 código de retorno significa que Vonage obtuvo los datos y los almacenó pero no ha comprobado que los valores sean válidos.

Integre las notificaciones push en su aplicación

Una vez que hayas cargado tu certificado en Vonage, integra VoIP push en tu aplicación siguiendo estos pasos:

1. Enlazar el CallKit Marco

Cuando utilices notificaciones push de VoIP, tendrás que usar el framework CallKit. Enlázalo a tu proyecto añadiéndolo en Marcos, bibliotecas y contenidos integrados en General:

Linking CallKit framework

2. Configurar PushKit

En su AppDelegateañada un voipRegistry propiedad:

let voipRegistry = PKPushRegistry(queue: nil)

y configurarlo:

func registerForVoIPPushes() {
    self.voipRegistry.delegate = self
    self.voipRegistry.desiredPushTypes = [PKPushType.voIP]
}

Llame a la función anterior en el didFinishLaunchingWithOptions AppDelegate función.

3. Regístrese para recibir notificaciones Push de VoIP

Aplicar la PKPushRegistryDelegate didUpdate que le proporcionará una función PKPushCredentials objeto. Este objeto contiene el token necesario para registrar este dispositivo.

NOTA: Antes de registrar el token, asegúrese de que primero ha creado correctamente una sesión.

Llame a registerDevicePushToken en el VGVoiceClient después de crear una sesión y pasar el token de credenciales push:

var isSandbox = false
#if DEBUG
   isSandbox = true
#endif

client.registerVoipToken(token, isSandbox: isSandbox) { error, deviceId in
      if error == nil {
         // Push token registered
      } else {
        // Push token registration error
      }
}

Esto vinculará el token a este dispositivo y al usuario que creó la sesión. Por ejemplo, si creaste una sesión con el usuario Alicecada vez que hay una llamada entrante para Alice Vonage buscará el token del dispositivo para Alice. 'isSandbox' le permite controlar si está utilizando el servidor de notificaciones push sandbox de Apple o no. Puede utilizar el deviceId para anular el registro del dispositivo para push.

4. Gestionar una notificación VoIP Push entrante

Cuando el dispositivo recibe una notificación push de VoIP entrante, el PKPushRegistryDelegate función delegada didReceiveIncomingPushWith será llamado. Aquí tendrás que comprobar si este push es de Vonage, y procesarlo:

func isVonagePush(with userInfo: [AnyHashable : Any]) -> Bool {
   VGVoiceClient.vonagePushType(userInfo) == .unknown ? false : true
}

func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType, completion: @escaping () -> Void) {
   if isVonagePush(with: payload.dictionaryPayload) {
      if let invite = client.processCallInvitePushData(payload) {
            // Report new call to CallKit 
      } else {
            // Report failed call to CallKit
      }
   }
}

Para procesar el push entrante, necesitará una sesión activa perteneciente al destinatario de la llamada. Se recomienda crear simultáneamente una nueva sesión y llamar a processCallInvitePushData siempre que el usuario no esté atendiendo una llamada.

En processCallInvitePushData se complete correctamente, recibirá una invitación de llamada en el didReceiveInviteForCall función delegada. Aquí puede informar de la llamada a CallKit.

func voiceClient(_ client: VGVoiceClient, didReceiveInviteForCall callId: String, from caller: String, withChannelType type: String) {
   let activeCall = UUID(uuidString: callID)
   let update = CXCallUpdate()
   update.localizedCallerName = caller

   // provider is an instance of CXProvider
   provider.reportNewIncomingCall(with: activeCall!, update: update) { error in
      if error == nil {
            completion()
      }
   }
}

NOTA: Antes de llamar answer o reject para la invitación a la llamada, asegúrese de que la sesión que creó anteriormente se ha creado correctamente.

Conclusión

En esta guía has visto cómo configurar las notificaciones push.

Voz:

Charla: