Как да изпратите HTTP POST до GCM с помощта на AS3 (google cloud messaging за android)

Опитвам се да направя HTTP заявка към GCM от actionscript в моето приложение AIR ANDROID. какво правя грешно Следвам формата на заявката тук.

Постоянно получавам грешка 400 обратно

var url:String = "https://android.googleapis.com/gcm/send";

var request:URLRequest = new URLRequest(url);

var rhArray:Array = new Array(new URLRequestHeader("Content-Type", "application/json"),new URLRequestHeader("Authorization", "key=MYAPIKEY"));
            request.requestHeaders = rhArray;

var msgData:String = JSON.stringify({"message":"holy crap message worked","title":"the message title here"});
var postData:String = JSON.stringify({"registration_ids":["THELONGREGISTRATIONIDOFTHEDEVICEIWANTTOMESSAGE"],"data":msgData});

request.data = postData;
request.method = URLRequestMethod.POST;

var urlLoader:URLLoader = new URLLoader();
urlLoader = new URLLoader();

urlLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler, false, 0, true);
urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler, false, 0, true);

urlLoader.load(request);

person brybam    schedule 23.03.2013    source източник


Отговори (2)


Ако получите 401 HTTP код за състояние, вашият API ключ не е валиден. Така че ако приемем, че имате валиден API ключ, първото нещо, което трябва да коригирате, е да промените

"Authorization", "MYAPIKEY"

to

"Authorization", "key=MYAPIKEY"

Ако получите 400 HTTP код за състояние, вашият JSON е невалиден. Уверете се, че изглежда така:

{ "collapse_key": "score_update",
  "time_to_live": 108,
  "delay_while_idle": true,
  "data": {
    "score": "4x8",
    "time": "15:16.2342"
  },
  "registration_ids":["4", "8", "15", "16", "23", "42"]
}

Може да пропускате някои кавички (изглежда, че ключовете ви нямат кавички).

person Eran    schedule 23.03.2013
comment
Хей, благодаря за отговора. За съжаление, когато публикувахте отговора си, аз просто актуализирах въпроса си. Току-що бях видял, че key= трябва да се добави. Все още не работи. Сега получавам грешка 400. Но без друга информация в обекта на събитието. Случайно да имате други идеи? - person brybam; 23.03.2013
comment
Току-що актуализирах по-горе, за да покажа точно как го имам. Тъй като просто изпращам до 1 регистрационен идентификатор, имам [THELONGID]. Освен това забелязах, ако проследя своя низ. Има много наклонени черти преди кавичките като \" Трябва ли да спра това по някакъв начин? - person brybam; 23.03.2013
comment
Можете ли да отпечатате вашата променлива postData? От кода ви по-горе изглежда, че не цитирате ключовете си (данните трябва да са данни, register_ids трябва да са register_ids и т.н...) - person Eran; 23.03.2013
comment
Продължих и опитах това, което предложихте, но все още нямах успех. Просто ги нямах, защото си мислех, че JSON.stringify е за това. Дори и с добавените кавички пак получавате същия отговор. - person brybam; 23.03.2013
comment
@brybam Е, ако отпечатате своя JSON (postDataariable), ще мога да ви кажа къде е проблемът. - person Eran; 23.03.2013

Също така имах проблеми с преминаването през кода на състоянието на HTTP 400. Опитах се да внедря функционалността с кода от brybam и както е посочено в отговора, кодът 400 означава, че JSON частта на http заявката е невалидна.

Заменете тези два реда от първия пост на brybam:

var msgData:String = JSON.stringify({"message":"holy crap message worked","title":"the message title here"});

var postData:String = JSON.stringify({"registration_ids":["THELONGREGISTRATIONIDOFTHEDEVICEIWANTTOMESSAGE"],"data":msgData});

С тези:

var msgData:String = JSON.stringify({data:{message:"holy crap message worked",title:"the message title here"}});

var postData:String = JSON.stringify({registration_ids:["THELONGREGISTRATIONIDOFTHEDEVICEIWANTTOMESSAGE"]});

// remove the first curly bracket of msgData since we will concatenate the two strings in a moment.

msgData = msgData.slice(1,msgData.length);

// remove the last curly bracket of postData too.

postData = postData.slice(0, postData.length-1);

// concatenate the two, separated by a comma.

postData = postData.concat(",",msgData);

Това проработи за мен, ако проследите променливата postData, ще видите, че JSON вече е правилно форматиран. Наздраве, Клаус

person Kramer    schedule 04.02.2014