На основе кода Teste. Я могу подтвердить следующие работы. Я не могу сказать, является ли это «хорошим» кодом, но он, безусловно, работает, и вы можете быстро и быстро восстановить работоспособность, если у вас возникли проблемы с GCM для сервера FCM!
public AndroidFCMPushNotificationStatus SendNotification(string serverApiKey, string senderId, string deviceId, string message)
{
AndroidFCMPushNotificationStatus result = new AndroidFCMPushNotificationStatus();
try
{
result.Successful = false;
result.Error = null;
var value = message;
WebRequest tRequest = WebRequest.Create("https://fcm.googleapis.com/fcm/send");
tRequest.Method = "post";
tRequest.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
tRequest.Headers.Add(string.Format("Authorization: key={0}", serverApiKey));
tRequest.Headers.Add(string.Format("Sender: id={0}", senderId));
string postData = "collapse_key=score_update&time_to_live=108&delay_while_idle=1&data.message=" + value + "&data.time=" + System.DateTime.Now.ToString() + "®istration_id=" + deviceId + "";
Byte[] byteArray = Encoding.UTF8.GetBytes(postData);
tRequest.ContentLength = byteArray.Length;
using (Stream dataStream = tRequest.GetRequestStream())
{
dataStream.Write(byteArray, 0, byteArray.Length);
using (WebResponse tResponse = tRequest.GetResponse())
{
using (Stream dataStreamResponse = tResponse.GetResponseStream())
{
using (StreamReader tReader = new StreamReader(dataStreamResponse))
{
String sResponseFromServer = tReader.ReadToEnd();
result.Response = sResponseFromServer;
}
}
}
}
}
catch (Exception ex)
{
result.Successful = false;
result.Response = null;
result.Error = ex;
}
return result;
}
public class AndroidFCMPushNotificationStatus
{
public bool Successful
{
get;
set;
}
public string Response
{
get;
set;
}
public Exception Error
{
get;
set;
}
}
Почему у Вас есть ожидание, что параметрический усилитель будет установлен на значение? Вы ответственны за парсинг командной строки способом, которого Вы требуете от массива $argv.
Передача параметров обрабатывается в Примечании справки онлайн: Если необходимо передать аргументы сценариям, необходимо передать - как первый аргумент при использовании переключателя-f. Это, казалось, работало под PHP4, но не под PHP5.
Но PHP все еще не анализирует те аргументы. Это просто передает их сценарию в массиве $argv.
Единственная причина - состоит в том так, чтобы PHP мог сказать, какие аргументы предназначены для исполняемого файла PHP и какие аргументы предназначены для Вашего сценария.
Это позволяет Вам сделать вещи как это:
php -e -n -f myScript.php -- -f -n -e
(-f,-n, и-e после - передаются myScript.php. Те прежде передаются самому PHP).
PHP не параметризовал Ваши параметры командной строки для Вас. Посмотрите вывод, где Ваша 2-я запись в ARGV является "param=test".
То, что Вы, скорее всего, хотите, должно использовать ГРУШЕВЫЙ пакет http://pear.php.net/package/Console_CommandLine: "Полнофункциональный синтаксический анализатор параметров командной строки и аргументов".
Или можно быть мазохистскими и добавить код, чтобы пройти ARGV и установить параметры сами. Вот очень упрощенный отрывок для получения Вас, запустился (это не будет работать, если первая часть не будет допустимым именем переменной или существует больше чем 1 '=' в части ARGV:
foreach($argv as $v) {
if(false !== strpos($v, '=')) {
$parts = explode('=', $v);
${$parts[0]} = $parts[1];
}
}
$argv является массивом, содержащим все Ваши параметры командной строки... Необходимо проанализировать тот массив и установить $param сами.
$tmp = $argv[1]; // $tmp="param=test"
$tmp = explode("=", $tmp); // $tmp=Array( 0 => param, 1 => test)
$param = $tmp[1]; // $param = "test";
Можно сделать что-то как:
if($argc > 1){
if($argv[1] == 'param=test'){
$param = 'test';
}
}
Конечно, можно стать намного более сложными, чем это по мере необходимости.
можно использовать массив $argv. как это:
<?php
echo $argv[1];
?>
помните, что первый член массива $argv (который является $argv [0]) является названием самого сценария, поэтому для использования параметров для приложения, необходимо начать использовать членов $argv [] от '1'th индекс. при вызове приложения используйте этот синтаксис:
php myscript.php -- myValue
нет никакой потребности поставить имя для параметра. как Вы видели, что Вы назвали var_dump () на $argv [], второй участник (который является первым параметром), была строка PARAM=TEST.правильно? таким образом, нет никакой потребности поставить имя для параметрического усилителя. просто введите значение параметрического усилителя.
Вы могли использовать что-то как
if (isset($argv[1]) {
$arg1 = $argv[1];
$arg1 = explode("=", $arg1);
$param = $arg1[1];
}
(как обработать отсутствие parameter/s, ваше дело), или если Вы нуждаетесь в более сложном сценарии, изучаете библиотеку синтаксического анализатора командной строки, такую как та от Груши.
использование ${$parts[0]} = $parts[1];
отправленный в другом решении позволяет Вам переопределить любую переменную в своем коде, который действительно не звучит безопасным.
Если вам нравится жить на передовой, в PHP 5.3 есть getOpt () команда, которая позаботится обо всем этом за вас. В некоторой степени.