ASIHTTPRequest - what broke in iOS 5? - objective-c

I have been using ASIHTTPRequest to do a simple POST upload of a "Scores and Settings" xml file to my server on an iOS game. As of iOS 5, ASIHTTPRequest is having some issues, and as mentioned here the library has been abandoned.
My question: What actually broke in iOS 5? I have looked at the other options for doing HTTP connections and uploading and they look heavy-hitting and a bit difficult compared to the ASI lib. If possible, I'd like to fix it, but I can't seem to figure out why it's not working. I just get:
[STATUS] Request Failed.
[STATUS] Starting asynchronous request.
Weird that the "Failed" line prints first, eh?
I have tried the suggestions at iOS 5 : https ( ASIHTTPRequest) stop working as well.

I presume the server you're having a problem with is https?
The main change is explained here:
http://developer.apple.com/library/ios/#technotes/tn2287/_index.html#//apple_ref/doc/uid/DTS40011309
However you say you've already the solutions that would fix problems related to this.
There are some more suggestions here:
https://github.com/pokeb/asi-http-request/issues/273
In particular:
After opening a support incident with Apple and a lot of back and forth I finally resolved my issue with accessing certain https URLs on
iOS5. It turns out that a change was made in the iOS 5 networking code
which causes iOS to reject secure connections if the server uses a
non-standard key length. The server I was talking to had a 2056 byte
key, instead of the typical 2048 bytes. I was able to get the server
admins to regenerate their key and now everything works fine again.
Does the same server work okay in Safari on the same device?

Related

Connection issues since update to 10.0

Since updating the system to version 10.0, my service has been experiencing connection issues while playing a track. I have not done any changes recently server side (however I don't want to rule out that I'm doing something wrong).
Here's what happens:
Hit Play
Track starts playing
After about 1 min to 1.30 min, I get the message in the controller: "Unable to play [track name] - the connection to [service] was lost.
After another few seconds the service skips to the next songs.
A few things to note:
I have received complaints about this issue from a few customers, only after the latest update, so I don't believe these are intermittent WiFi issues.
I have tested with serving the streaming files locally from my laptop and it works fine.
Based on all of this, I believe there is an issue in the connection between the Sonos player and the streaming server (or CDN). I'm out of ideas though, on what I should be looking for. Requests, headers etc. look fine to me.
Is there any other way to troubleshoot or see what is actually happening when the Sonos player "looses connection to the service"?
Thanks much

webcam recording with red5

We have a red5 recorder/red5 server setup. This is working correctly and videos are getting created in the server. We are having a problem with the recording and playback etc not working in a streamlined way. ie after you record and play the recorded one, it may not always play. The player sort of gets stuck.
Are there any free or paid alternatives to red5 recorder that does the job really well?
The reason why the videos don't play can vary and it is not sure if another streaming server will resolve your issue. For example if you have network issues no matter what streaming server you use, it will fail.
However, alternatives might be Wowza or Adobe FMS.
Sebastian
Maybe you are suffering from the same problem I have, see:
WARN o.r.s.net.rtmpt.BaseRTMPTConnection - Response buffer was null after encoding
Are there any warnings in your log file after the stream did fail? This log file may reveal your problem, see /usr/local/red5/log/red5.log

Push notifications not being received on distribute

I had successfully implemented push notifications for the developer certificate but cannot seem to get it work for an ad hoc test with a friend. I did the same process for creating the push notification keys/certificates except now I chose "Production Push SSL Certificate" instead of "Development Push SSL Certificate". I believe that this is correct since I could not find any tutorials around that showed how to do it for production... all of them were for development.
This quick process can be found from ray wenderlich blog here: http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12
This is my guess where things might have gone wrong because maybe there is a different way to do Production Push. I left my php code the same on my server as I had it before for Development Push (copied over the new ck.pem). Is this alright or do I need to make changes? I can post the code if someone thinks it is the code but as I said.. the php server code worked before.
Can someone please help me out? Thanks in advance!
I CANNOT ANSWER MY QUESTION BECAUSE I DO NOT HAVE ENOUGH REP. THE CORRECT ANSWER IS HERE
for my development I had:
gateway.push.apple.com:2195
but for production it needs to be:
gateway.apple.com:2195
Hope this helps someone in the future.
[Edited]
You can also try to check your token are correctly set, your devices are allowed to receive notifications.
If you have made many tests, you may also have been temporarily banned from APNS server, you mustn't make too many calls to the APNS server in a small time range.
Please also note that there may be some delays from the time you send the notification to the APNS server, and the time the APNS server sends it to your device.
LAst bu not least, make sure your devices have a correct Internet / SSL free access some proxies or firewalls may block notifications
Are you getting the devices token dynamically? Because when the app is in ad-hoc distribution it is generating a different device token for push notifications form when it is in debug (a.k.a developer) mode

Wireless Authentication Page iOS app

I'm not really sure how to word this exactly, so hopefully someone can make sense of it. I've been working on an iPad app that syncs files from a server to your iPad and lets you build presentations with the various files. The corporation I'm working with on this app has a wireless network that requires you to re-authenticate every hour. So every hour instead of getting the expected JSON api response, any HTTP request pulls down the page needed to reauth with the wireless network. I was wondering is there is a specific HTTP response code related to getting sent that page or a "best-practice" way of testing for that page as opposed to JSON.
Granted I could just test to see if the response is HTML, but that doesn't account for other redirect responses that I haven't found yet. I could just test part of the HTML to see if it matches a predetermined portion of the html, but I'm an outside contractor. I can't guarantee they won't change the markup or verbiage of the page after I've made my deliverable.
So does anyone out in the ether know a "best practices" methodology for testing if the app needs to reauth before syncing?
I noticed that on Mac OS X and maybe even iOS, when you connect to a new Wi-Fi network, it will try to contact www.apple.com. This is being done to check if the internet connectivity is available. If it's not available, the Captive Network Assistant will pop-up, showing you the authentication page, or sometimes when I'm in Starbucks, an advertisement.
Following your question, since Apple themselves is doing it this way, I think you could check for HTTP response code, look for something in the HTML markup (slightly discouraged though) or trying to connect to a known server (Reachability).
For a corporation practicing well-documented projects, I am quite sure they won't be changing things without making sure that your app, once deployed will continue to work.

Getting Orbited to work with my Twisted app

I can't seem to get Orbited working with my Twisted app. I have a page, served by Twisted (say localhost:8000/page) which includes Orbited.js from the orbited server (localhost:8001/static/Orbited.js). I then have a TCP chat server example running on port 7777. I try to use Orbited.TCPSocket to connect to the chat server:
conn=new Orbited.TCPSocket();
conn.open("localhost", 7777);
conn.send("test\r\n"); //error: bad readyState
It works fine when Orbited is serving the page, but not when twisted serves it from a different port. My orbited.cfg looks like this:
[listen]
http://:8001
[access]
* -> localhost:7777
And before (which worked) I had this in it as well:
[static]
test=index.html
Where index.html was another page grabbing localhost:8001/static/Orbited.js, and was accessed from localhost:8001/test.
How do I need to change my config file to work with requests from my twisted site on another port?
Update
I tried changing Orbited.settings.port to 8001 before trying to open the connection, but I got an error: "unsafe javascript attempt to access frame with url http://localhost:8000/page from frame with url http://localhost:8001/static/xsdrBridge.html#1. Domains, protocols and ports must match."
Hmm, also, I just looked at the orbited wiki, and apparently, setting Orbited.settings.port is exactly what I'm supposed to do. but I'm getting horrible errors
You can call send() only after the connection is in opened state.
Put a handler for .onopen() and do a .send() from there.
I have used Orbited in the past. It works in general but there are several quirks to get it set up and running smoothly. The project itself seems to be in a state of flux (it seems to be moving to node.js). Both of these points lead me to suggest that - if you can avoid it - not to use Orbited.
Are there alternatives that are cleaner? I would say, yes. You can pretty much emulate Orbited with Websockets on stock Twisted. This will clearly work for newer browsers. What about older ones? Well, there are open-source projects that wrap websockets and fall back to flash as a transport for older browsers. The setup works quite well, and actually feels cleaner than using a solution like orbited.
If you check out http://github.com/rlotun/txWebSocket you'll find the current state of Twisted's websocket implementation, as well as an example of how to fall back to flash on older browsers. Hopefully this will be useful enough for you to serve as a drop in replacement to Orbited.