APNS测试人员推送通知失败

时间:2017-02-20 07:23:52

标签: ios iphone apple-push-notifications

  

02-20 07:10:53 +0000:已连接到服务器gateway.sandbox.push.apple.com

     

2017-02-20 07:10:53 +0000:设置SSL连接

     

2017-02-20 07:10:53 +0000:设置对等域名gateway.sandbox.push.apple.com

     

2017-02-20 07:10:53 +0000:Keychain已打开

     

2017-02-20 07:10:53 +0000:Apple Development IOS推送服务的证书数据:MyApp已成功初始化

     

2017-02-20 07:10:53 +0000:创建sec身份失败,错误代码-25300

     

2017-02-20 07:10:53 +0000:创建客户端证书失败,错误代码-50

     

2017-02-20 07:10:53 +0000:使用错误发送数据到gateway.sandbox.push.apple.com:2195失败:-9806,错误代码-9806

     

2017-02-20 07:10:53 +0000:与服务器`gateway.sandbox.push.apple.com断开连接:2195

APNS测试仪中出现此错误。可以有人告诉我这个问题吗?

1 个答案:

答案 0 :(得分:1)

使用您提供的信息很难准确诊断。 但请检查一下。

  1. 检查APNS发送服务器代码。
  2. 如果您使用的是PHP,则可以使用此示例:

    <?php
    // My device token here (without spaces):
    $deviceToken = 'Token ID';
    
    // My private key's passphrase here:
    $passphrase = 'Password';
    
    // My alert message here:
    $message = 'Hello!';
    
    //badge
    $badge = 1;
    
    $ctx = stream_context_create();
    stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
    stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
    
    // Open a connection to the APNS server
    $fp = stream_socket_client(
    '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);
    }
    echo 'Connected to APNS' . PHP_EOL;
    
     // Create the payload body
    $body['aps'] = array(
        'alert' => $message,
        'badge' => $badge,
        'sound' => 'newMessage.wav'
    );
    
    // 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 'Error, notification not sent' . PHP_EOL;
    }else{
        echo 'notification sent!' . PHP_EOL;
    }
    
    // Close the connection to the server
    fclose($fp);
    ?>
    

    如果您使用JSP,请使用以下示例:

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ page import="javapns.back.PushNotificationManager" %>
    <%@ page import="javapns.back.SSLConnectionHelper" %>
    <%@ page import="javapns.data.Device" %>
    <%@ page import="javapns.data.PayLoad" %>
    <%@ page import="java.lang.Object" %>
    <%@ page import="org.apache.commons.lang.StringUtils" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Push Notification</title>
    </head>
    <body>
    <%
        System.out.println("Start~!!!");
    
        String deviceToken = "Token ID";
        PayLoad payLoad = new PayLoad();
        payLoad.addAlert("Hello!");    // Message
        payLoad.addBadge(1);
        payLoad.addSound("default");
        PushNotificationManager pushManager = PushNotificationManager.getInstance();
        pushManager.addDevice("iPhone", deviceToken);
    
        //Connect to APNs
        //String host = "gateway.push.apple.com";  // To Appstore
        String host = "gateway.sandbox.push.apple.com";  // To Development
        int port = 2195;
        String certificatePath = "/Users/nzeen.com/Documents/apns/apns.p12";  // Push Notification Certificate
        String certificatePassword = "Password"; // Password
        pushManager.initializeConnection(host, port, certificatePath, certificatePassword, SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);
    
        //Send Push
        Device client = pushManager.getDevice("iPhone");
        pushManager.sendNotification(client, payLoad);
        pushManager.stopConnection();
        pushManager.removeDevice("iPhone");
    %>
    
    please wait…!
    </body>
    </html>
    
    1. 检查您使用的证书。 您应该为每个环境使用证书。 因为使用的证书因APNS的服务器类型而异, 您应该为每个环境使用证书。

      “gateway.push.apple.com:2195” 要么 “gateway.sandbox.push.apple.com:2195”

    2. 识别被测网络。 您可以通过控制台上的以下命令检查连接是否正常。

      “[hostname /] $ Telnet gateway.sandbox.push.apple.com 2195”

      或者

      “[hostname /] $ Telnet gateway.sandbox.push.apple.com 2195”