didreceiveincomingpushwith没有调用(代码片段)

author author     2023-05-13     169

关键词:

我正在创建一个VOIP应用程序,它使用pushKit作为后端来唤醒用户杀死应用程序的应用程序或在后台。

最初,我在pushKit文件中创建了appDelegate的代表

let voipPushResgistry = PKPushRegistry(queue: DispatchQueue.main)

voipPushResgistry.delegate = self

voipPushResgistry.desiredPushTypes = [PKPushType.voIP]

然后我设置了它的代表

func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType, completion: @escaping () -> Void) 

    print("This is pushKit type ", payload.type)
    completion()


func pushRegistry(_ registry: PKPushRegistry, didInvalidatePushTokenFor type: PKPushType) 

    print("===== This going to invalid token ======", type.rawValue)


func pushRegistry(_ registry: PKPushRegistry, didUpdate pushCredentials: PKPushCredentials, for type: PKPushType) 
    let token = pushCredentials.token.map  String(format: "%02.2hhx", $0) .joined()
    print("======= voip token: (token)")
    UserDefaults.standard.setDeviceToken(value: token)

之后,我得到了一个特定应用程序的令牌,我开始使用PHP脚本唤醒应用程序,我将它发布在我自己的服务器上:这是PHP脚本:

<?php

 // Put your device token here (without spaces):

 // This is token that gets from appdelegate
    $deviceToken = '****************************************';
 //


  echo $device;
  // Put your private key's passphrase here:
  $passphrase = '123456';

  // Put your alert message here:
  $message = 'My first push notification!';


  $ctx = stream_context_create();
  stream_context_set_option($ctx, 'ssl', 'local_cert', 'voip.pem');
  stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

  // Open a connection to the APNS server
  $fp = stream_socket_client(
    //  'ssl://gateway.push.apple.com:2195', $err,
        'ssl://gateway.sandbox.push.apple.com:2195', $err,
         $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, 
       $ctx);

  if (!$fp)
    exit("Failed to connect: $err $errstr" . PHP_EOL);



   // Create the payload body

   $body['aps'] = array(
                 'content-available'=> 1,
                 'alert' => $message,
                 'sound' => 'default',
                 'badge' => 0,
                 );



    // Encode the payload as JSON

    $payload = json_encode($body);

    // Build the binary notification
     $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;

    // Send it to the server
     $result = fwrite($fp, $msg, strlen($msg));

    if (!$result)
       echo 'Message not delivered' . PHP_EOL;
     else
        echo 'Message is successfully delivered' . PHP_EOL;

     // Close the connection to the server
     fclose($fp);

我执行PHP文件后,它给了我消息Message is successfully delivered但遗憾的是,

func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType, completion: @escaping () -> Void) 

    print("This is pushKit type ", payload.type)
    completion()

以上功能未触发。使这件事发生的问题是什么?如何解决这个问题?

答案

我认为你需要服务如下图像。

Check image

如果您已经完成,请在线查看

https://apns-gcm.bryantan.info/