C # iPhone push-сервер?

Вот как я это сделал:

Сначала определите имена колонок, которые вы будете использовать, или оставьте поле пустым, и pdo предположит, что вы хотите использовать все столбцы таблицы - в этом случае вы «Мне нужно сообщить значения строк в том порядке, в каком они появляются в таблице.

$cols = 'name', 'middleName', 'eMail';
$table = 'people';

Теперь предположим, что у вас уже подготовлен двухмерный массив. Итерации и построение строки с вашими значениями строк:

foreach ( $people as $person ) {
if(! $rowVals ) {
$rows = '(' . "'$name'" . ',' . "'$middleName'" . ',' .           "'$eMail'" . ')';
} else { $rowVals  = '(' . "'$name'" . ',' . "'$middleName'" . ',' . "'$eMail'" . ')';
}

Теперь, что вы только что сделали, это проверить, были ли уже определены строки $, а если нет, создайте их и сохраните значения строк и необходимый синтаксис SQL, поэтому он будет действительным оператором. Обратите внимание, что строки должны входить в двойные кавычки и одинарные кавычки, поэтому они будут незамедлительно распознаны как таковые.

Все, что осталось сделать, это подготовить оператор и выполнить как таковой:

$stmt = $db->prepare ( "INSERT INTO $table $cols VALUES $rowVals" );
$stmt->execute ();

Протестировано до 2000 строк до сих пор, а время исполнения удручающее. Запустит еще несколько тестов и вернется сюда, если у меня есть что-то еще.

С уважением.

30
задан amattn 14 July 2009 в 20:34
поделиться

5 ответов

Разобрался. Заменен sslStream.AuthenticateAsClient ("gateway.sandbox.push.apple.com"); с sslStream.AuthenticateAsClient ("gateway.sandbox.push.apple.com", clientCertificateCollection, SslProtocols.Default, false); И зарегистрировал сертификаты на ПК.

Редактировать: вот код для создания полезной нагрузки в соответствии с запросом:

    private static byte[] GeneratePayload(byte [] deviceToken, string message, string sound)
    {
        MemoryStream memoryStream = new MemoryStream();

        // Command
        memoryStream.WriteByte(0);

        byte[] tokenLength = BitConverter.GetBytes((Int16)32);
        Array.Reverse(tokenLength);
        // device token length
        memoryStream.Write(tokenLength, 0, 2);

        // Token
        memoryStream.Write(deviceToken, 0, 32);

        // String length
        string apnMessage = string.Format ( "{{\"aps\":{{\"alert\":{{\"body\":\"{0}\",\"action-loc-key\":null}},\"sound\":\"{1}\"}}}}",
            message,
            sound);

        byte [] apnMessageLength = BitConverter.GetBytes((Int16)apnMessage.Length);
        Array.Reverse ( apnMessageLength );
        // message length
        memoryStream.Write(apnMessageLength, 0, 2);

        // Write the message
        memoryStream.Write(System.Text.ASCIIEncoding.ASCII.GetBytes(apnMessage), 0, apnMessage.Length);

        return memoryStream.ToArray();
    } // End of GeneratePayload
8
ответ дан Kyle 14 July 2009 в 20:34
поделиться

«Полученное сообщение было неожиданным или плохо отформатировано». Обычно ошибка возникает, когда вы не зарегистрировали сертификат p12 в Windows. (В Vista просто дважды щелкните файл p12, и откроется мастер импорта)

0
ответ дан 14 July 2009 в 20:34
поделиться

Другой способ - просто использовать классы X509Certificate2 и X509CertificateCollection2.

1
ответ дан 28 November 2019 в 00:28
поделиться

Недавно я использовал Growl For Windows для отправки сообщений клиенту Prowl на IPhone из кода .Net . Так что вы можете получить свою функциональность без написания самого push-сервера.

1
ответ дан 28 November 2019 в 00:28
поделиться

Из комментария Зенокса: используйте другую версию AuthenticateAsClient

sslStream.AuthenticateAsClient("gateway.sandbox.push.apple.com", clientCertificateCollection, SslProtocols.Default, false);
5
ответ дан 28 November 2019 в 00:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: