testflight - 为什么推送通知不适用于测试飞行(生产设置)?
问题描述
我已经在生产环境中测试了推送通知并且它有效,但是当我尝试将它放在 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);
?>
解决方案
推荐阅读
- swift - 调用中位置 #2、#3 的额外参数 - Swift
- c - 我可以在 C 中有一个长度不确定的数组吗?
- c - 如何在 C 中使用 exec argv 传递指针?
- android - 如何在 Android 中使用 Groupie 在 Recyclerview 中实现 HeaderItems
- excel - 在工作簿中移动形状
- c++ - 如何将命名空间中的函数作为非命名空间参数传递?
- cassandra - 即使在查询中提及所有分区键后,Cassandra 仍要求允许过滤?
- laravel - 将文件夹文件复制到另一个文件夹
- swift - 使用分段控件快速隐藏元素
- app-inventor - 如何在 App Inventor 中实现渐进式加载?