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?


Ответы (0 шт):