We made the decision to switch to realtime games instead of turn based (meaning the underlying technology, it is still a turn based card game). We began to have serious, serious problems. Basically it seems like Game Center is about as worthless as it comes for realtime game communication. Looking at sites like stackoverflow.com and general Google searches it seems like this is a common problem.
When working on WiFi things generally work okay. I still run into these issues but not quite as often. When one or more of the devices is on cellular data connection, Game Center will try to send data and it will occasionally fail. Okay, makes sense. For some reason, it kind of seems like Game Center doesn’t retry the data and instead the connection eventually times out and reports a disconnect (because it, guessing, is not receiving any acknowledgements at all).
Here is the kicker. This is when using the Reliable method of transmission. Okay, I could see that. It should be able to handle an unstable connection, that is the whole point of reliable data transmission. It retries if it doesn’t go through the first time. So okay, lets try switching to unreliable and do our own resends if something doesn’t get through. Bzzzt. Doesn’t work either, same problem. So apparently even when working in unreliable mode it must require some kind of ack packet before it will continue sending data.
This also seems to be a two-way problem. I don’t mean it can happen to either client, I mean it happens to both at the same time. This would leave me to think it might be a Game Center server issue where it just closes down the connections for the entire GKMatch. Whenever I have issues both devices stop receiving at the same time. It is possible this is only a sandbox issue but, well that is kind of worse. If that is the case then I can’t even test our app to see if it will work without releasing it to the app store and just crossing my fingers. Seriously Apple?
Thinking this might just be an issue with my code I built an extremely simple view controller to test this. It sends a single byte of data every 10 seconds and logs how many packets have been sent and how many have been received. It will count received packets for a while and then stop counting. Tracing the code proves that my “received data” methods are never being called.
As such, we have started looking for another solution for game matching, including the possibility of an in-house system.
Integrating Wunderlist and Slack
Wunderlist and Slack announced last week that they can now be integrated together. Exciting news! It seems like kind of a “meh” feature, but it has been extremely helpful already this past week. We are only using it for basic notifications. When we add or complete an item from our Mealtime list in Wunderlist it automatically sends a message to one of our Slack channels giving the information. This has made our #weekly-updates channel much more useful since we don’t have to remember to mention every little thing we accomplish, just the big things. All the little ones are posted automagically for us.
- I implemented the “not enough mints” screen which gives the player the option to “buy more” or “earn more” (by watching a video). Currently the “buy more” option just gives free mints and “earn more” does nothing.
- Matt updated a number of elements in the character builder: Mouth, backgrounds, shirt, eyewear, etc. I was able to get those new elements imported and into the app. The new options look pretty good!
As you an see, we didn’t get a lot done in terms of quantity. We spent a lot of time on the Character Builder working it up with all the new elements we had discussed at last weeks meeting. The Game Center issues really slowed down things for me. We were just gearing up to start testing multiplayer and that started bombing as soon as we began playing against each other.