我正在尝试在生产环境上发送推送通知,但它无法正常工作。下面是我正在尝试的代码,它会超时。没有错误,没有异常被抛出。 这有什么问题?
注意:当我使用Sandbox(ENVIRONMENT_SANDBOX
)和开发证书文件发送推送通知时,它可以正常工作。但是,生产证书文件和ENVIRONMENT_PRODUCTION
不起作用。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
/**
* @param string $device_token unique device token
* @param string $custom_message message that needs to be pushed
* @param string $push_service which service to use ( ApnsPHP/UrbanAirship )
*
* @return bool
* @throws ApnsPHP_Exception
* @throws ApnsPHP_Message_Exception
* @throws ApnsPHP_Push_Exception
* @throws Exception
*/
function send_apple_push_notification_test( $device_token, $custom_message, $push_service = 'ApnsPHP' ) {
if ( empty( $device_token ) || empty( $custom_message ) ) {
return false;
}
// Report all PHP errors
error_reporting( -1 );
// Adjust to your time-zone
date_default_timezone_set( 'America/New_York' );
// Using Autoload all classes are loaded on-demand
require_once 'includes/ApnsPHP/Autoload.php';
try {
// Instantiate a new ApnsPHP_Push object
$push = new ApnsPHP_Push(
ApnsPHP_Abstract::ENVIRONMENT_PRODUCTION, '/home/xxxxx/public_html/wp-content/themes/yyyyyy/includes/ApnsPHP-pem/AppPushNotify.pem'
);
// Set the Root Certificate Authority to verify the Apple remote peer
$push->setRootCertificationAuthority( '/home/xxxxx/public_html/wp-content/themes/yyyyyy/includes/ApnsPHP-pem/Entrust_Root_Certification_Authority.pem' );
// Connect to the Apple Push Notification Service
$push->connect();
// Instantiate a new Message with a single recipient
$message = new ApnsPHP_Message_Custom( (string) $device_token );
// Set a custom identifier. To get back this identifier use the getCustomIdentifier() method
// over a ApnsPHP_Message object retrieved with the getErrors() message.
$message->setCustomIdentifier( "xxxyyyzzz-" . time() );
// Set a simple welcome text
$message->setText( (string) $custom_message );
// Play the default sound
$message->setSound();
// Set the expiry value to 30 seconds
$message->setExpiry( 60 );
// Set the "View" button title.
$message->setActionLocKey( 'See the message.' );
// Add the message to the message queue
$push->add( $message );
// Send all messages in the message queue
$push->send();
// Disconnect from the Apple Push Notification Service
$push->disconnect();
// Examine the error message container
$aErrorQueue = $push->getErrors();
print_r( $aErrorQueue );
return true;
} catch ( Exception $e ) {
print_r( $e->getMessage() );
}
return false;
}
echo "start";
send_apple_push_notification_test( '20fcc5090eb1f539ac0fddd345r4d0c50e5bca071b742d3d9833f16dd97adeb', 'Test Msg for Production' );
答案 0 :(得分:1)
要使用生产环境,您的应用必须使用您的分发证书进行签名。测试此功能的唯一方法是提交到App Store并下载应用程序的App Store版本;或使用AdHoc构建。当您的应用程序使用开发证书签名时,您无法使用生产推送环境。
如果您已完成所有这些操作,请确保您没有使用与从开发环境获得的生产环境相同的设备令牌。他们将是不同的。