У меня есть эта функция в php, которая будет отправлять 2 уведомления в приложение A и приложение B, когда есть действие для функции.
Однако я получу только 1 уведомление в одном приложении.
Я использую apnsphp для отправки уведомлений.
Ниже моя ситуация:
У меня есть 2 приложения: приложение A и приложение B
Оба приложения используют разные сертификаты apns.
есть ли возможность кеширования apns cert?
Сценарий 1)
При входе в IPAD с помощью приложения A & одновременно вошли в IPAD с APP B, Push-уведомление получено для APP A, а не для APP B.
Сценарий 2)
при входе в IPAD с помощью приложения A и входе в iPhone (на отдельном устройстве) с помощью приложения B, Push-уведомление принимается для приложения A, а не для приложения B.
Сценарий 3)
Когда вы вышли из iPad с помощью APP A и вошли в iPad (на том же устройстве) или iPhone (на отдельном устройстве) с помощью APP B, Push-уведомление получено приложением B.
Я получаю эту ошибку от apnsphp:
["ERRORS"]=> array(2) {
[0]=>
array(3) {
["identifier"]=> int(1)
["statusCode"]=> int(999)
["statusMessage"]=> string(53) "Internal error (0 bytes written instead of 223 bytes)"}
[1]=>
array(5) {
["command"]=> int(8)
["statusCode"]=> int(8)
["identifier"]=> int(1)
["time"]=> int(1415012295)
["statusMessage"]=> string(13) "Invalid token"}
}
Ниже приведены журналы:
Tue, 04 Nov 2014 10:02:25 +0800 ApnsPHP[4136]: INFO: Trying tls://gateway.push.apple.com:2195...
Tue, 04 Nov 2014 10:02:26 +0800 ApnsPHP[4136]: INFO: Connected to
tls://gateway.push.apple.com:2195. Tue, 04 Nov 2014 10:02:26 +0800 ApnsPHP[4136]: INFO: Sending
messages queue, run #1: 1 message(s) left in queue. Tue, 04 Nov 2014 10:02:26 +0800
ApnsPHP[4136]: STATUS: Sending message ID 1 [custom identifier: CakeApns] (1/3): 166 bytes. Tue,
04 Nov 2014 10:02:27 +0800 ApnsPHP[4136]: INFO: Disconnected.
Tue, 04 Nov 2014 10:02:27 +0800 ApnsPHP[4136]: INFO: Sending messages queue, run #1: 1 message(s)
left in queue. Tue, 04 Nov 2014
10:02:27 +0800 ApnsPHP[4136]: STATUS: Sending message ID 1 [custom identifier: CakeApns] (1/3):
221 bytes. Tue, 04 Nov 2014 10:02:27 +0800 ApnsPHP[4136]: ERROR: Unable to send message ID 1:
Internal error (0 bytes written instead of 221 bytes) (999). Tue, 04 Nov 2014 10:02:27 +0800
ApnsPHP[4136]: INFO: Trying tls://gateway.push.apple.com:2195... Tue, 04 Nov 2014 10:02:28 +0800
ApnsPHP[4136]: INFO: Connected to tls://gateway.push.apple.com:2195. Tue, 04 Nov 2014 10:02:28
+0800 ApnsPHP[4136]: INFO: Sending messages queue, run #2: 1 message(s) left in queue. Tue, 04
Nov 2014 10:02:28 +0800 ApnsPHP[4136]: STATUS: Sending message ID 1 [custom identifier: CakeApns]
(2/3): 221 bytes. Tue, 04 Nov 2014 10:02:28 +0800 ApnsPHP[4136]: ERROR: Unable to send message ID
1: Invalid token (8). Tue, 04 Nov 2014 10:02:28 +0800 ApnsPHP[4136]: INFO: Disconnected. Tue, 04
Nov 2014 10:02:28 +0800 ApnsPHP[4136]: INFO: Trying tls://gateway.push.apple.com:2195... Tue, 04
Nov 2014 10:02:29 +0800 ApnsPHP[4136]: INFO: Connected to tls://gateway.push.apple.com:2195. Tue,
04 Nov 2014 10:02:29 +0800 ApnsPHP[4136]: INFO: Sending messages queue, run #3: 1 message(s) left
in queue. Tue, 04 Nov 2014 10:02:29 +0800 ApnsPHP[4136]: WARNING: Message ID 1 [custom
identifier: CakeApns] has an unrecoverable error (8), removing from queue without retrying...
Tue, 04 Nov 2014 10:02:30 +0800 ApnsPHP[4136]: INFO: Disconnected.
Я решил это, отредактировав файл ApnsComponent.
я добавил в новую публичную переменную: previousData
Эта переменная будет хранить текущий комбинированный_каталог_соединения, к которому она подключена. Когда я переключаю свой путь сертификата, я проверю, совпадает ли путь сертификата с моим подключенным путем сертификата. Если это не то же самое, я переподключусь к apns. Если это тот же путь, я верну истину.
Проверка состоит в том, чтобы предотвратить переподключение сервера и увеличить время отправки.
private function __connect() {
if($this->previousData == ""){
$this->previousData = $this->combined_cert_path;
$this->__push = new ApnsPHP_Push($this->env, $this->combined_cert_path);
$this->__push->setProviderCertificatePassphrase($this->cert_passphrase);
$logger = new ApnsPHP_Log_Custom(!$this->__logEnabled);
$this->__push->setLogger($logger);
//$this->__push->setSendRetryTimes($this->__sendRetryTimes);
$this->__push->connect();
return $this->__logError();
}
else if($this->previousData != $this->combined_cert_path){
$this->previousData = $this->combined_cert_path;
$this->__push = new ApnsPHP_Push($this->env, $this->combined_cert_path);
$this->__push->setProviderCertificatePassphrase($this->cert_passphrase);
$logger = new ApnsPHP_Log_Custom(!$this->__logEnabled);
$this->__push->setLogger($logger);
//$this->__push->setSendRetryTimes($this->__sendRetryTimes);
$this->__push->connect();
return $this->__logError();
}else{
return true;
}
}
Других решений пока нет …