首页 > 解决方案 > 为什么推送通知不适用于测试飞行(生产设置)?

问题描述

我已经在生产环境中测试了推送通知并且它有效,但是当我尝试将它放在 TestFlight 上让测试人员对其进行测试时,它没有显示推送通知。

我在 testFlight 上使用生产认证和生产 apn url 很长时间了。自 2020 年 4 月左右以来,它不再起作用。

那么 TestFlight 中是否更新了政策?

推送 php 代码如下。(仅 .pem 文件和令牌不同)。它在生产中工作(从应用商店下载),而不是在 testflight 中工作。

<?php

// Production mode
$certificateFile = 'pappCk.pem';
$pushServer = 'ssl://gateway.push.apple.com:2195';
$feedbackServer = 'ssl://feedback.push.apple.com:2196';

// Sandbox mode
//$certificateFile = 'apns-dev.pem';
//$pushServer = 'ssl://gateway.sandbox.push.apple.com:2195';
//$feedbackServer = 'ssl://feedback.sandbox.push.apple.com:2196';

$deviceToken = '......';

// push notification
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $certificateFile);
$fp = stream_socket_client(
    $pushServer,
    $error,
    $errorStr,
    100,
    STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT,
    $streamContext
);

// make payload
$payloadObject = array(
    'aps' => array(
        'alert' => 'Server Time:'.date('Y-m-d H:i:s'),
        'sound' => 'default',
        'badge' => 3
    ),
    'custom_key' => 'custom_value'
);
$payload = json_encode($payloadObject);


$expire = time() + 3600;
$id = time();

if ($expire) {
    // Enhanced mode
    $binary  = pack('CNNnH*n', 1, $id, $expire, 32, $deviceToken, strlen($payload)).$payload;
} else {
    // Simple mode
    $binary  = pack('CnH*n', 0, 32, $deviceToken, strlen($payload)).$payload;
}
$result = fwrite($fp, $binary);
fclose($fp);

?>

标签: testflightapn

解决方案


推荐阅读