I recently had to implement an API to send push messages to Windows phone 8 from Java. So called “tile” messages did work fine after getting the authentication part working. But “toast” messages did not work. The Microsoft push server answered that everything is OK, but the test software on the phone said that there is an error in the payload. The payload for these messages is XML which describes to the phone what text etc it should display.
After some conversation with Microsoft everything pointed to the encoding of the XML payload. I was wondering, why they use different encoding for tile and toast messages. After some checks in the code, I was 100% sure that I send UTF8 there as required.
Then I took a test push send software from Microsoft and analyzed the payload. There were some different HTTP headers, but the payload was XML just as mine. The only difference was, that the Microsoft payload was formatted XML. And yes, unbelievable, but this was the problem. After I added carriage return/line feed and some spaces, the toast messages worked as expected.
Thanks Microsoft for this nice hand made XML parser that expects the payload to contain “\r\n” to form a well formatted XML string!! And I thought that formatting XML is only good for human being’s eyes. You never stop learning…