加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

APNS PHP推送通知无法正常工作.得到超时

发布时间:2020-12-13 22:53:42 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试在生产环境上发送推送通知,但它无法正常工作.下面是我正在尝试的代码,它会超时.没有错误,没有异常被抛出. 这有什么问题? 注意:当我使用Sandbox(ENVIRONMENT_SANDBOX)和开发证书文件发送推送通知时,它可以正常工作.但是,生产证书文件和ENVIRONMEN
我正在尝试在生产环境上发送推送通知,但它无法正常工作.下面是我正在尝试的代码,它会超时.没有错误,没有异常被抛出.
这有什么问题?

注意:当我使用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' );

解决方法

要使用生产环境,您的应用必须使用您的分发证书进行签名.测试此功能的唯一方法是提交到App Store并下载应用程序的App Store版本;或使用AdHoc构建.当您的应用程序使用开发证书签名时,您无法使用生产推送环境.

如果您已完成所有这些操作,请确保您没有使用与从开发环境获得的生产环境相同的设备令牌.他们将是不同的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读