IOS 13 push token в php
У меня возникла проблема с пуш-токенами в IOS 13 и выше. Как известно, они приходят в этой версии в формате {length = 32, bytes = 0xd3d997af 967d1f43 b405374a 13394d2f … 28f10282 14af515f } В интернете есть куча решений, но все они либо на swift, либо на c#. Я воспользовался примером на c#
public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
{
//DeviceToken = Regex.Replace(deviceToken.ToString(), "[^0-9a-zA-Z]+", "");
//Replace the above line whick worked up to iOS12 with the code below:
byte[] bytes = deviceToken.ToArray<byte>();
string[] hexArray = bytes.Select(b => b.ToString("x2")).ToArray();
DeviceToken = string.Join(string.Empty, hexArray);
}
Написал аналог на php
private function preparePushToken($pushToken) {
if (!preg_match('/length/', $pushToken)) {
return $pushToken;
}
$pushToken = explode('=', $pushToken);
$rest = $pushToken[2];
$rest = preg_replace('/^0x(.{8,8})(.{8,8})(.{8,8})(.{8,8})(.{3,3})(.{8,8})(.{8,8})(\})$/', '$1 $2 $3 $4 $5 $6 $7', $rest);
$pushToken = '{length = 32, bytes = ' . $rest . ' }';
$result = [];
foreach(str_split($pushToken) as $char){
array_push($result, sprintf("%02X", ord($char)));
}
return implode('', $result);
return $result;
}
Однако как видно из примеров, в примере на c# deviceToken приходит в непонятном формате NSData, а у меня в БД пуш-токены хранятся в строках. Такой вопрос - как в php переконвертировать string в NSData?