Aarif
Aarif

Reputation: 87

Failed in APNS Tester Push notifications

02-20 07:10:53 +0000: Connected to server gateway.sandbox.push.apple.com

2017-02-20 07:10:53 +0000: Set SSL connection

2017-02-20 07:10:53 +0000: Set peer domain name gateway.sandbox.push.apple.com

2017-02-20 07:10:53 +0000: Keychain Opened

2017-02-20 07:10:53 +0000: Certificate data for Apple Development IOS Push Services: MyApp initialized successfully

2017-02-20 07:10:53 +0000: Failure creating sec identity, error code -25300

2017-02-20 07:10:53 +0000: Failure creating client certificate, error code -50

2017-02-20 07:10:53 +0000: Failed with sending data to gateway.sandbox.push.apple.com:2195 with ERROR: -9806, error code -9806

2017-02-20 07:10:53 +0000: Disconnected from server`gateway.sandbox.push.apple.com:2195

This error coming in APNS tester. Could any one tell me the issue?

Upvotes: 1

Views: 865

Answers (1)

hooni
hooni

Reputation: 249

It is difficult to diagnose accurately with the information you provide. But please check this out.

  1. Check the APNS sending server code.

You can use this sample if you are using 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);
?>

If you use JSP, use this sample :

<%@ 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. Check the certificate you are using. You should use the certificate for each environment. Because the certificate used differs depending on the server type of APNS, You should use the certificate for each environment.

    "gateway.push.apple.com:2195" Or "gateway.sandbox.push.apple.com:2195"

  2. Identify the network under test. You can check whether the connection is normally done by the following command on the console.

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

    Or

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

Upvotes: 1

Related Questions