pregnancy adult games download porn games and

>>Ian Lewis: (Off mike.)>>Dan Galpin: I think there are about two people who got –>>Ian Lewis: Everyone in the front row got that joke. The rest of you, doesn’t matter. [ Applause ]>>Dan Galpin: It’s not a very Googley joke, though, as they go. I guess we’re going to go with half of a screen. >>Ian Lewis: People on the right side of theroom, sorry, man. Sorry. >>Dan Galpin: Now we need volume off of that,believe it or not. Ooh, that’s good. >>Ian Lewis: Oh, no. That one’s better. Here. (Sound effects). >>Dan Galpin: There we are. Each week, deep in their secret chambers belowGoogle building 44, the Android editorial board meets to decide which apps and gameswill be featured in the Google Play Store. This is an important decision. For a lot of developers, it’s a matter oflife and death. So we take it very seriously. >>Ian Lewis: At the same time, it is an editorialdecision. What does that mean? You have no control over this. I have no control over this. The — my wife wants to call me, but that’snot going to happen. [ Laughter ]>>Dan Galpin: The one time you’re allowed to say “no.” >>Ian Lewis: Exactly. [ Laughter ]>>Ian Lewis: You can’t pay for featuring in Google Play. You can’t bribe people. You can’t send us bottles of Dom Perignonand then get featured. That actually doesn’t work as well as somepeople seem to think. >>Dan Galpin: But keep trying. >>Ian Lewis: There’s no sure-fire recipe forgetting featured. The decision is made by the editorial teamaccording to their own criteria. So you’re never going to see a talk called,”What to do to get featured on Google Play.” At the same time, Dan and I have spent a lotof time with the editorial board, and we’ve seen a lot of games, a lot of excellent games,get rejected for what seem like sort of minor reasons. A lot of them are problems that are reallyeasy to fix. So although we can’t talk about what to doto get featured on Google Play, we can talk about what to not do to not not not get featuredon not — [ Laughter ]>>Ian Lewis: — not — yeah. Anyway –>>Dan Galpin: The transcription is going to be great there. >>Ian Lewis: More succinctly, ten things thatevery Android gamer developer should know. So let’s start with number one, Dan. >>Dan Galpin: All right. So one of the things that people do when theygo out and buy their great new Android handset is they come back and go to Google Play, andthey want to get great stuff. And, you know — that was good — we at Androidlove all your releases, but we always have a special place in our heart for our newestversion and we love it when people use our newest operating system. We also love it when people buy now Androiddevices. So we tend to avoid featuring anything that’sincompatible with the latest and greatest. The first thing you want to do is make sureyou support high resolutions. You’ll need to author your assets today forat least 720p. And remember that not all 720p displays areequal.

Default pregnancy adult games download porn games andAnd remember that not all 720p displays areequal. Assets that look great on a ten-inch tabletaren’t necessarily going to work on a seven-inch tablet or phone. And this is especially true for UI elementsthat have to be sized like your fingers, like drumsticks. >>Ian Lewis: Oh, Dan, tell them what the dpithe Nexus 7 is. >>Dan Galpin: So the Nexus 7 is in between. But you should really think of it for themost part as being an hdpi device. We refer to it as tvdpi. And what this means is, don’t expect to havea resource that’s sized for your finger. Instead, look at the display density and scaleyour resources accordingly. >>Ian Lewis: Because you do not want to bethe guy that designs the Xbox one controller; right? I’ve seen tablet games that basically do that. >>Dan Galpin: Another thing you want to makesure is do — make sure your app isn’t running compatibility mode on Honeycomb and above. You can tell you’re in compatibility modebecause there will be extra icons in your status bar like the menu button. Not everyone knows what this means, but toexperienced users, it’s a red flag. So what can you do about it? It turns out the solution is very simple. Just specify a target API of 11 or above. The target API for what reason is called targetSDK version in your application manifest and you should really target the latest versionas much as possible. All that really means is I have tested onthe latest version of Android. And this is good, because we won’t turn onany compatibility shims. >>Ian Lewis: Now, the compiler will give youa warning. It will say, hey, you just specified a targetSDK that’s greater than your min SDK, like that’s a problem. >>Dan Galpin: Yeah, yeah. So that’s the one time — Normally, look atLint and be, like, “Yes, Lint is right.” In this case, –>>Ian Lewis: Don’t believe its lies. >>Dan Galpin: Yeah. Lint will actually do the right thing andit will actually tell you if you use API levels that aren’t going to work on your target devices. So it’s good. A lot of programmers worry that specifyinga high-target API is going to mean it gets filtered out on the Play Store. Of course, that isn’t the case. It’s just designed to turn off compatibilityshim. Filtering is done with min and max SDK version. And, in general, it makes sense to send minSDK version to the lowest version that your game will run on, set target SDK version tothe version of the SDK you’re compiling against or testing against, and really don’t everset max SDK version. But you know what’s cooler than API level16? Lights out. You can almost completely hide the soft buttons. And this is really easy to do. Just, literally, take — go to your view andset your view to status bar hidden. You can only do this on Honeycomb and above. The good news is that it’s very easy to putin a conditional around that, as long as you’re, you know, not targeting Donut or somethinglike that. >>Ian Lewis: Right. They told us by the way to put a code samplein for that and we’re like, these — >>Dan Galpin: They don’t need a code samplefor that. >>Ian Lewis: We’ll be posting code samplelater. So thing number two, how to evade piratesand symptom vampires. So by “pirates” and “vampires,” we mean peoplewho steal software and people who steal bandwidth by downloading game (indiscernible) resourceswhen they haven’t actually bought your game.

1 pregnancy adult games download porn games andby downloading game (indiscernible) resourceswhen they haven’t actually bought your game. Now, we can go on and on about whether piratesrepresent lost sales or theoretical lost sales or a wonderful new distribution mechanismthat’s going to make us all rich. But of the two, vampires are the ones we’remost concerned about, because they represent an immediate bill to you for bandwidth thatyou’re using to download assets that were never paid for. So we want to stop vampires the most, butwe do want to stop them both. When we’re talking about stopping pirates,a lot of times we talk about copy protection. There’s one thing that you should never do. And that is check the copy protection boxon the Google Play publisher site. We had this thing when we were sort of youngand naive as an operating system called forward-locking. And it prevented users from casually copyingAPKs from phone to phone. We optimistically called it copy protectionbecause we thought that it would help to curb piracy. It turns out we were completely wrong. [ Laughter ]>>Ian Lewis: Forward-locking doesn’t actually stop piracy at all. It’s supposed to keep users from copying games. But what it really does is prevents the completelylegitimate activity of putting a game on the SD card. But it gets better. Not only does forward-locking prevent youfrom moving to SD card, but it also expands the size of the APK on your internal storage. So you basically have got the worst of bothworlds if you check that box. If you did ever check it, go uncheck it now. Just remember that once you remove forward-locking,you will have to do another APK upload to get that update to come out. We’re actually removing it very soon, becauseit turned out to be a bit of what they call a Charlie Foxtrot in the business. So what do you do? Well, first, in order to deter pirates, youshould use the license verification library. Now, this isn’t a perfect solution. But it will help to deter casual piracy. It will not stop the most determined hackers. For vampires, though, we have an extremelygood solution. It’s already saved many of our partners hundredsof thousands of dollars in bandwidth. And that is APK expansion files, which meansthat Google is hosting your large files for you instead of you having to use your owncontent distribution network. This is good for two reasons. First, no cost to you. Second, unless you’re a very, very large companyyourself, we probably have a better CDN than you do. So faster and cheaper. Use APK expansion files. You can also, if you do want to serve yourown files, watch Dan’s presentation from last year’s Google I/O to understand how to tielarge file downloads to the LVL, license verification library. That’s actually what the APK expansion systemdoes internally. And you can do it externally as well. Large file hosting is available now. It works on almost everything. And for the devices that were unable to getthe Google Play update that enables large files, you can download Dan’s excellent shimlibrary that is chockful of best practices for how to do a background download, and you’llfind that your user experience for downloads is much, much better. >>Dan Galpin: Thank you. So now to point 3, which is don’t mess withthe buttons. And as you noticed, these Android deviceshave buttons on them, things like the lock button and the volume button and the backbutton and the home button and the, you know,

pregnancy adult games download porn games and button and the volume button and the backbutton and the home button and the, you know,

2 pregnancy adult games download porn games andbutton and the volume button and the backbutton and the home button and the, you know, app switcher button. And, basically, the goal with most of theseis — is either leave it alone because you can’t do anything about it, or try to usethe default behavior of the framework. In the case of the volume keys, you want tomake sure those volume messages go to the framework so you actually get the normal popupthat the user expects for controlling the volume. Now, the one real question that game developershave is, what do I do about the back button? Because most games actually consist of a singleactivity. And the default behavior for the back buttonis just to close, destroy the activity, and remove history. So the way we like to think of the back buttonis it’s sort of like the escape key. So let’s take our example game here. And, you know, basically, you know, this is– you know, this is a simple arcade game. And we start the game. We go through a few menus. We’re in the middle of our playing. And we hit the back key. And, boom, what does that do? Well, it makes sense for it to take us backhere, because that’s what the user expects; right? That’s the screen the user was on. Even though this was all a single activity,we expect the Android navigation paradigm to be, you know, used. So another option is to actually pop up adialogue. And this is very common. A lot of game developers do this. It’s not the best practice because it reallydoesn’t match the Android navigation paradigm. But it’s very well known, and we certainlydon’t have anything against this practice. So the real question now is, you put up thisdialogue. And where do you want it to go after you hitthe back key again? Do you want it to go back to this screen? Or do you want it to go back to the game play? And, really, if — since this one is obviouslylooking like a dialogue, we expect it to behave like a dialogue in Android. We pop the dialogue in the back key, and weexpect it to be dismissed. In general, what we’re talking about hereis choosing the UI that will disrupt the user’s game experience the least. So dismissing the pause menu like a dialogueactually will be what the user expects. But even better again, we skip the pause menuentirely, go back to our previous screen. We have some very obvious option to allowthe user to continue where they left off. >>Ian Lewis: Now, I realize that this is anincredible mockup and you’re probably thinking, okay, I want my game to look exactly likethat. But the truth is, Dan and I made it in Photoshopand we’re not professionals. So you might want to steer clear. But the main point that we’re –>>Dan Galpin: Are you saying we don’t have elite design skills? >>Ian Lewis: No. No, we don’t. The main point is that you want to be ableto go back to a previous UI screen, but always have a way to go forward again. >>Dan Galpin: Exactly. And here’s the thing really, really not todo. And there’s a lot of reasons why this is bad. One that, obviously, this is a system dialoguewhich drops the user out of their game. It’s better than just quitting without warning,admittedly, you know, because at least the user hasn’t lost data and lost the state here. But not by much. It — just don’t do it.

3 pregnancy adult games download porn games andIt — just don’t do it. So here is our back button recap. And believe it or not, there have been internaldiscussions about this, and debates. >>Ian Lewis: Ad nauseam. >>Dan Galpin: Yes, exactly. But this is the basic theory of back buttonin Android games. In a dialogue, dismiss the dialogue. In a UI, whenever possible, move to previousscreen. In game play, either pause or do one of thefollowing: Show an options dialogue, move to the previous screen. And make sure that they haven’t lost any state. And at the initial UI screen, you can justdismiss the app. There’s no need to put up a big screen thatsays, “Do you really want to quit?” >>Ian Lewis: Do you really want to quit thetitle screen? This is an awesome title screen. >>Dan Galpin: This is an epic title screen. >>Ian Lewis: Exactly. But the most important thing is, never loseprogress. >>Dan Galpin: Never. >>Ian Lewis: Never allow the user to loseprogress. That would suck. To a certain extent, that also means don’tlose progress in terms of needing to go back and load for 30 seconds, which sometimes youcan’t do much about. All right. Number 4, respect the life cycle. We’re going to illustrate the life cycle problemwith a little story. So wake up early in the morning. First thing I do is reach for my phone. Can you get a little gaming in before work? When I’m going to go to work and play forgames. But let’s pretend this isn’t me. This is some other dude. So, right, on a roll. Everything’s cool. Totally lost track of time. Oh, no, I’m going to miss my bus. So really quick, throw on my — my work clothes,which totally look like this, and jump on the bus, head off to work. Now I’m giving a presentation to my boss. Everything’s going well until I’ve got tocheck something on my phone; right? Exactly. Pull that baby out. Turn it on. Oh, my God, what’s going on here? It’s not just that it’s playing music. It’s playing music and the phone is locked. And now I’m really stressed out and I’ve gotthis lengthy PIN code that I need to enter and I can’t even remember what it is; right? So everything sucks, my boss thinks I’m moreof an idiot than he already did. I’ve just ruined my whole day. What’s the problem here? Well, the issue is that the life cycle hereis complicated. Not only is it complicated, it’s varying slightlyfrom OS to OS, none of the delivery order that you’re seeing here is guaranteed. In fact, it is changed in Jelly Bean because– (Clap) — we told them to. [ Laughter ]>>Ian Lewis: So the problem is, you lock your phone, and the app gets an onpause. And then it gets an onstop at some point. When you — and, actually, the really greatthing is, on Honeycomb and ICS, there were some cases where while the phone was asleep,you would get an onresume. We didn’t cover that here. But sometimes that will happen. Then the user goes back and presses the lockbutton again and the phone tries to wake up and sends the foreground app, an onrestart,onresume. Now, you might be thinking at this point,who’s the foreground app? You would be justified in assuming that it’sthe app in the foreground, which is the lock screen. Wrong. It’s actually your app because until JellyBean, the lock screen didn’t count as an application, it was sort of a random overlay. So what will happen is your application thinksthat it’s woken up and starts, you know, playing music or doing whatever, but it’s actuallybeing hidden by the lock screen still, and that’s a really, really annoying behavior. There’s actually a very, very easy way tofix this. And forget about all this life cycle stuffbecause it’s difficult. There are edge cases, it’s incredibly annoyingto get right. All you need to do is this: If your application’spaused, if your game is paused, stop playing the sound. And when you want to start playing sound again,what do you look for? Not some Android life cycle, you look forthe game getting unpaused which requires some sort of user activity, right? So the user hits a button to take you outof pause and go back to game play, that’s when you restart the sound. It turns out this is great for two reasons:First, it avoids all this nonsense. Second, it turns out it’s a great user experienceto leave the app and then when you come back in it’s paused, so you don’t just get thrownright back into game play before you’re prepared. Of course, hitting lock screen isn’t the onlyway that your game can get paused or even killed during game play. This is a consequence of being on a mobileoperating system, right? It’s not about multitasking, it’s not about,you know, which model we chose or how we tombstone or anything like that, it’s just the factthat your user is playing your game on a device that’s designed to let him know when importantthings happen like a phone call comes in. It’s designed to be put in a pocket when heneeds to catch the bus. Android, by its very nature, being a smartphoneOS, is interruptible, and so you need to be completely prepared to handle those interruptionsin a way that doesn’t waste your users’ time. So we said it before and we’re going to recapnow — never, ever, allow your user to lose progress based on an interruption that’s beyondtheir control or even an interruption that’s under their control. Should we go to thing five? >>Dan Galpin: Exactly, all right, so Ian,this is your chance to get on the synthesizer here. Just want you to know we’re using an FM synthesizerthat is unfortunately — there we are, we needed some volume. This is an open source project, so you’remore than welcome to download it and Ian is going to give me some nice — that’s good,all right. [ Music ]>>Ian Lewis: Howdy-doo, Dan! >>Dan Galpin: So minimize permissions. This is an actual application on Google Play. This is actually the list of permissions thatthe user has to see. [ Laughter ]>>Dan Galpin: And, you know, like, what is the user going to be like, gee, what am Iagreeing to? Okay. That is actually from the web interface. So what we have now is our top ten bad gamepermissions. Yes, this is a top ten list inside of a topten list. >>Ian Lewis: By the way, you can tell thatthis is a Dan Galpin slide deck because we used the fire effect more than once. Totally broke that rule. [ Laughter ]>>Dan Galpin: Number one bad — Number 10 — excuse me — bad permission for a gameto have is change Wi-Fi settings. Why are you doing this? You’re turning — you’re toggling Wi-Fi onand you have no idea whether the user has actually set up Wi-Fi and even better, there’san intent to throw the user right into the Wi-Fi chooser. So don’t do it. Receive boot completed. Okay, admittedly there are some games thatare resource management kind of games and they really want to make sure they can constantlyset alarms, but in general most games don’t need to do this unless they’re trying to spamthe user with something. Just please don’t do this unless you absolutelyhave you have to. Probably the only good use of actually startingyour game up is because you want to set an alarm. And that’s pretty much it. You want to make an alarm persist across aboot. Do very, very lightweight stuff here. The real key thing is, whatever you do, donot have a consistently running service that makes a network connection and sucks the user’sbattery down. And we’ll talk about that a little later. >>Ian Lewis: Unless you’re making a game forme because I love it when my game notifies me that my cow needs to be clicked, I wouldforget to click that cow. >>Dan Galpin: Yeah, absolutely. Not to mention, it’s really nice, it helpsto keep your hand warm as the phone’s radio is constantly being kept on in your pocket. All right. Query running tasks. Why does a game want to spy other tasks? There are a couple semi-legitimate reasonsfor this, but most of the time, your game doesn’t need to know what other tasks arerunning. Obtain fine location. Okay, now, there’s a lot of people, like,I have a location-based game, if you have a location-based game, if your game actuallymaybe has a change in it, if the user walks into their local coffee shop, then, yeah,obtain fine location is cool. For most games, users are concerned with analytics,they want to know approximately where people are playing their game, they want to knowa little bit about the demographics of their marketing. Obtain fine location is just kind of creepyand it requires firing up the GPS, using a lot of battery. Don’t do it, course location is good enough. >>Ian Lewis: A lot of people will come backand tell us, well, my ad network required that. You know what, no. Because, you know what, this guy does notneed different ads than that guy, all right? [ Laughter ]>>Ian Lewis: This is not the way things work. So course location is fine for that. >>Dan Galpin: Read system log. Now, I’ve got bad news for you guys. If you haven’t watched some of our other presentations,read system log actually is gone as of J. There is no more read system log that youcan get. However — however — J allows you, withouta permission, to read the system log for your own app. All right? C’mon, this is really cool stuff. [ Applause ]>>Dan Galpin: So the good news is no creepy spying on what the user is doing by turningon their read system log permission. And at the same time you can still get tothe useful logs you need to help your debugging if the crash recording and all the stuff wehave on Google Play isn’t enough. All right, directly call phone numbers. We’ve seen this in a lot of applications. I’m like, seriously, there’s an intent. Fire off and call a phone number. Why would you actually use this permission? That’s just like — like do you really wantthe game to pop up something that directly — I don’t get it. All right. Read and write contacts and calendar. Now, admittedly, there are some uses, butmost of them, 99% of them can actually be done with contact choosers and contact figures,you don’t actually need to have the contact permission if you just want to have the userfill in a name. The only reason you need this is because youneed to do something like spam every single user, or even worse, go and read their contactsand suck them into your own service and use them for nefarious purposes. And remember, these are not things that we’resaying you can’t use. What we’re saying is if you use these things,you’re going to really reduce your chance of ever being featured. Okay, so this is really the key thing aboutthis list is that we’re going to take what you’re doing reading the user’s contacts andcalendar, and unless you have a really, really good excuse, we’re not going to feature theapp. That’s what the team is going to do. >>Ian Lewis: I just got a reminder, it’s 9:30a.m. Click cow. >>Dan Galpin: Oh, yeah. [ Laughter ]>>Dan Galpin: Reading and writing bookmarks. Super creepy. I want to go and check out –>>Ian Lewis: This is eastern European porn site stuff, people. >>Dan Galpin: Do you really — does a gamereally want to know the sites that someone else — that’s awful. And writing to the bookmarks is even worse. Like wait, where is that super annoying siteand how did it get to my — so, you know, look, unless you have a — I can’t think ofa legitimate reason for using this, which is why it’s number three, but you’re goingto have to justify it seriously to the editorial board if you want to get a game featured withthat. Display system level alerts. This is the way you make your app do creepystuff and pop up on top of other applications. And it’s just not good. There’s a very, very good chance your gamehas no possible useful way of doing this. Use the notification system we have builtinto Android. That’s what it’s for. And then finally, our number one top ten badpermission that is likely to get you not featured is send and receive SMS. [ Applause ]>>Dan Galpin: And first of all, so receive SMS really sucks because it actually allowsyour app to filter every single SMS message that comes into the device. Awful, awful, awful. As a user, I’m like no way am I downloadingthat app. Okay? And then send SMS, well, that allows you tobill people without them knowing that, isn’t that awesome? So, yeah, seriously, if you ever want to getfeatured and this is there, I mean, like the chances are basically zero. But there is a way, if you really want toallow the user to share to all their friends over SMS, use the intent. There’s no permission involved and the userswill thank you. All right, so there we are, our top ten listof bad permissions for games to not get featured on Google Play. >>Ian Lewis: All right. [ Applause ]>>Ian Lewis: And we’re only half done, folks. But we did sort of front-load this thing becausewe thought you’d all be gone by this point. So item six, ready? There is no item six. [ Laughter ]>>Ian Lewis: Like two guys got that. Why did you do the hat? That’s so unfair, you upstaged me with yourCruella De Vil pimp hat. >>Dan Galpin: Hey, it was Pride last weekendhere in San Francisco, okay, they were selling these all over the streets. >>Ian Lewis: Pretty amazing. >>Dan Galpin: And it does say on my I/O tag”wears funny hats,” there we are. >>Ian Lewis: Good point. Well, actually, we brought out the funny hatbecause — yeah, this is the boring, freaky part. We’re in San Francisco, Dan drives a Prius. >>Dan Galpin: You know, not everyone needsto know that. There are at least two or three Google employeeswho do not drive Priuses. >>Ian Lewis: That’s true, I drive a ’95 Integrathat doesn’t pass emissions. That’s the kind of guy I am. Environmental policy aside, it’s importantto be green on your app on the phone. It’s important to conserve your users’ resources. You’re game developers, you want to make thecoolest game possible, you want to monetize and do some analytics and drive engagement,but these are portable devices, they have limited capabilities, they have limited resources. Your battery, your network bandwidth, yourmemory and storage are all precious, precious commodities that your users try to maximizeat all times. And because users try to maximize these, wegive them tools to understand what’s going on. And if you haven’t already, you will findthat users use these tools all the time and they watch your game. And if your battery usage is high, if you’realways on the network, if you’ve got long-running services in the background, they will findout and they will publicly shame you off and on Google+. APK expansion files. See, what will happen is Google Play dropsyour APK expansion on the SDK card, which is cool, and then a lot of people say, youknow what, I actually had that all packed up into one file because the man wouldn’tlet me upload more than two files. So I’m going to go ahead and unpack that sothat I can actually use it. Oh, but then, wait, I’ve just used up a bunchmore storage so my policy’s going to be let’s delete the original APK expansion file. That seems like it would make a lot of sense,but it does not, three times, you see? See, we’re so bad. The problem here is that now you’ve unpackedyour APK expansion file, you’ve left all this junk over the user’s SDK card and the expansionfile is gone so what does Google Play do? What every sane system would do, dude, yourfile’s gone, want ’em back? [ Laughter ]>>Ian Lewis: So now instead of a gig or whatever it was, you’ve got two gigs and you’ve gotsome very unhappy users. Unfortunately, the way this works is you haveto use your APK expansion file in place. Now Dan’s written a bunch of samples that– do you notice, by the way, every time we talk about sample code, it starts “Dan’s written,”and every time it’s something I did, it starts “I was so drunk.” This is exactly why he’s the senior memberof our team. >>Dan Galpin: Because I’m a month older. There we are. >>Ian Lewis: That’s true. So what you want to do is if you have yourown binary blob reader, you have pack files or whatever, go ahead and use that. If you don’t, we do have some samples thatshow you how to use an APK expansion file or even any type of zip file as a mountablefile system and that can actually make things easier for you. >>Dan Galpin: The thing is an APK file isreally just a zip file. A lot of people are like, well, I can’t putit in my APK, so it’s not going to work. I’m like you can just put another zip fileon the drive and you can do exactly the same thing. In fact, a lot of people are doing this. In fact, they figured out that when they’reusing something like unity, which normally pulls all of its resources out of the APKfile, all you have to do is point to unity and say actually my APK file is actually thesecond thing that I download and then all of a sudden unity will pull all the filesout of that. And there’s actually a tool that someone hasmade that takes all of those unity files and pull them over to the second file. So it’s not hard. But if you don’t have it built into your tool,I have a couple of things that you can look at. Look at the APK expansion file libraries,there’s actually a zip resource file that I put down there. There’s a content provider example, so ifyou really want to go all the way Android and you want to store content that’s referencedusing an asset content provider, it’s actually all there in sample code for you. So no excuses, man, okay? >>Ian Lewis: All right, we ready for seven? >>Dan Galpin: We’re ready for seven. >>Ian Lewis: This is going to be so good. >>Dan Galpin: Oh, yeah. Oh, yeah. So one of the things that happens when yousign up for Google Play is that you’re actually asked to look at some things like what youshould do and what you shouldn’t do on Google Play. If you think about Google Play is it is thisecosystem where OEMs and developers and carriers all get together to make sure there’s oneawesome place to find great stuff. >>Ian Lewis: A lot of times we do sort ofenvision in our heads Google Play is like the old “Star Trek” when Spock would playthis three-dimensional game of chess except instead of Spock, it’s Andy, and that’s actuallytotally downplaying the complexity of the system. There’s a lot of players in the system andit all combines to give you 400 million devices to sell to, but it does come with some restrictions. >>Dan Galpin: And the real key thing is wewant to make sure you can publish once and you don’t have to go and hunt and to findall sorts of places and rules and different sets of rules to publish your apps, so hereare our rules and they get you to the largest number of devices. All right. >>Ian Lewis: The three commandments. >>Dan Galpin: The three commandments of GooglePlay. One, thou shalt have no payment providersbut Google Play. This is basically pretty simple. You’re listing on our service. Don’t confuse users by having them input allsorts of different information, sending them to different places, billing them withouttheir knowledge. We want one straightforward way that usersunderstand they’re paying for content. >>Ian Lewis: We would also like to be ableto continue paying for Google Play so that’s — we do have a bit of a selfish motive here. And these rules aren’t –>>Dan Galpin: We want carriers to keep putting Google Play on our devices. That’s probably the most important thing. >>Ian Lewis: Yeah. So, sir, you in the back, with the goldencap, put that away. >>Ian Lewis: Two, thou shalt not upload anapp that downloads other apps. Now, because the main goal of Google Playis to be a place where people go to find content and it’s not a place to distribute your appstore. If you want to distribute your app store,distribute it somewhere else. Android is an open platform, okay? The second thing is if you’re actually installingother apps, it’s a really bad user experience, you’ll find out. So, yeah, don’t do it, and it’s a good wayto make sure things happen badly with our enforcement team. All right. And then finally, thou shalt not bribe thycustomers for five-star reviews. >>Ian Lewis: For that is hateful in my sight,sayeth me. >>Dan Galpin: That was good. So don’t provide incentives for specific reviewscores. Google Play will not feature an app that incentivizesreview scores, partially because it’s hard to tell what people actually think of yourgame when they’re being paid to rate it five stars. Besides, it’s actually impossible for yourgame to find out what score a particular user gave you. So promising to pay for a specific score iskind of dishonest. So at the same time we don’t want to discourageapps from asking for ratings. The right way to ask for ratings is to beupfront, honest and sincere. Ask users for their candid feedback. If you want to, you could incentivize youruser to leave a rating, just don’t ask for a specific rating. You could also ask for a specific rating withoutoffering an incentive, that’s within the letter of the law, but not really the spirit. The whole point of a review is to get honestfeedback so you can improve your game. >>Ian Lewis: So here’s some examples thatwe pulled from actual games and simply, you know, altered a little bit to protect theinnocent. And so when we did this presentation for ourteam, we got two major pieces of feedback. One was the Australians thought that thingsix was racist. And two was — you don’t even remember whatthing six was so we didn’t — you’ll wake — the coffee will kick in in a little bit. Two was we see these — these example dialogueboxes, but there’s no real feedback is — as to which ones are good, which ones are badand how good and bad they are. So I’ve enlisted my baby daughter to helpout. “Thanks for playing, please take some timeto rate this game on Google Play. We want to know what you think.” Baby daughter says, “Oh, Daddy, that’s sogreat!” >>Dan Galpin: “Did you enjoy this game? Rate it five stars!” Whew. >>Ian Lewis: Baby daughter says, “That’s alittle sketchy, Daddy.” >>Dan Galpin: Even worse, “Having fun? Your five-star rating helps us to keep thisgame updated!” Oh, sad daughter! Or how about this, “Want more GalpinBux? Rate this game five stars and get 100 GalpinBuxright away and all of your friends will think you’re cool!” Bad! So there’s some shady characters out therethat will claim these rules don’t apply to them or they’re not enforced or they havesome sort of arrangement with Google that allows them to use a third-party payment processor. This is not true. Do not believe their lies. All right? So we are giving you the straight story here. And that takes us to point 8. >>Ian Lewis: Awesome. In-app payments are unfortunately easy toget wrong. Now, our in-app payment system seems likeit should be relatively easy. Okay. Customer decides they are going to buy something,they hit the big button, delivers the thing, and the customer receives it and everythingis cool. They are super happy. >>Dan Galpin: Thanks, bro. >>Ian Lewis: But what really happens is alittle bit like the FedEx scenario here, but you are asleep. Sometimes your app will be sleeping when thismessage arrives. In that case, normal real world — okay. Normal real world delivery companies havea policy, right? They are going to try to deliver and if there’ssomebody home, like your roommate, they will be like, oh, can you sign for this? Yeah, totally. And then later on your roommate gives youthe package and you’re, like — >>Dan Galpin: Thanks, bro. >>Ian Lewis: Excellent. But what if your roommate is this guy?[ Laughter ] >>Ian Lewis: So here’s what happens. Very, very common in games because so manygames use native libraries. Game is going to be written with a big gamepiece and this little billing service piece that you tacked on as an afterthought becauseour documentation said that you had to. There is big shared library that both of thosepieces are going to talk to. And that is totally fine as long as you’relaunching with the expected process. Right? So the user has clicked on your icon in alauncher, launcher sends action main, game starts. It starts up the shared library. Service starts. Talks to the shared library, listens for billingmessages. Billing message gets there. It does whatever you do in the game to acknowledgebilling and fulfill it, and everybody is happy. But sometimes things don’t go as planned becausewhen the message gets there, your app is no longer available. Why? Why would that happen? It’s conventional wisdom to think this isbecause our billing process took way too long and that’s actually untrue. Not because our billing process is lightningfast, although it frequently is, but because we actually just canceled the whole thingafter what is it? 45 seconds? >>Dan Galpin: These are, for the most partin your applications, these are synchronous transactions. >>Ian Lewis: Why is your app asleep? The first culprit is Google Play itself. In order to the in-app billing, we have tolaunch Google Play. Google Play is not maybe the slimmest servicein the world and, in general, games aren’t either. So when two large processes start on the Androiddevice, the OS starts to freakout. Like okay, one of these things has got togo, right? >>Dan Galpin: One of the things to note isyour application will get long memory and it has the ability to eject stuff at thispoint and try to keep itself alive. But, you know, a lot of game developers don’treally want to do that. They are like, life cycle, whatever, we willlet ourselves die. That’s what happens. We go, you’re the biggest thing going andwe can get rid of a lot of space to allow Google Play to actually run. >>Ian Lewis: Ironically enough, launchingthe in-app billing kills your process, and then when you come back from in-app billing,your process should restart but you frequently don’t take care of that correctly. This is a little unexpected. But that aside, there’s actually another reallygood reason for your app to be asleep when a billing message arrives. I would like to illustrate this point witha small shot of a portion of Dan’s desk. [ Laughter ]>>Ian Lewis: A lot of people have multiple devices. And Google Play policies allow you to buysomething once and use it on multiple devices. Customers love this. I love this. It’s a great policy. But what it means is if I bought somethingon my phone, my tablet is going to get a billing message. And since my tablet probably isn’t even on,the app that’s supposed to receive it is probably asleep. So what happens? Well, of course you will wake up. We need to deliver this thing. So Google Play is going to try and wake youup. But it’s not going to try to wake up yourwhole app. It just wakes up the service. The problem is, when the service wakes up,you haven’t written it to initialize all of the other code. You wouldn’t want to. Right? A lot of times initializing the shared library,loads your resources. You are doing a lot of expensive work. If the shared library is not there — andby shared library, that’s a catch-all for your in-game message system, unity messages,shared memory between yourselves and game. Anything that’s not persistent. That will kill everything. >>Dan Galpin: I want to make it clear thatI actually didn’t put the fire effects in this presentation, okay? >>Ian Lewis: I thought you did. >>Dan Galpin: Only one of them. >>Ian Lewis: Then I got a little excited. I want to be like Dan. A lot of times people say that’s not a problem,right? I read the documentation. This isn’t an issue. You guys are reliable. If I don’t acknowledge your receipt, thenyou’re just going to keep calling me back, right? Which is somewhat true. If you do not acknowledge a billing message,we will keep calling you back until it gets acknowledged. Let’s leave aside the fact that some developerswill acknowledge the billings message anyway without successfully delivering it. Those guys need to get their act together. Waiting for our billing message to be re-senthas two issues. The first is, because we don’t want to completelyspam the users device, we use exponential back-off. Since you have gotten yourself into a situationwhere your app needs to be running in order for the billing message to be received, you’rein a crap shoot here because the user has to have launched your app in order for thatbilling message to be received and the billing messages are comings at a slower and slowerrate. It’s very, very unlikely that they are actuallygoing to have the app open at the correct time. Especially if they just closed it in frustrationbecause they think that you cheated them by not delivering the goods that they just purchased. But there’s a second and more compelling reasonto be careful about this. And that is, during this entire time thatwe are essentially leaving post-it notes on your door. Tried to deliver, we’ll be back tomorrow. Tried to deliver, adult must sign. That whole time the user has already beenbilled. So let me just emphasize that. The user has already been billed. We billed the user when we sent the firstacknowledgment. Why? Otherwise it would be trivial for an userto buy something and then block your port so you couldn’t send an acknowledgment. Then we would be like, oh, it never got delivered. Meanwhile you are like, oh, I guess it gotfulfilled. The user is, like, hee-hee-hee. The user will see this show up on its creditcard. If you don’t fulfill it immediately, theywill think that you cheated them. You sort of did unintentionally. This turns into a support call for you. Often a support call for us. Overall a poor experience. Be very, very –>>Dan Galpin: Bad ratings. That’s the key thing. Bad ratings keep your app from being featured. >>Ian Lewis: Absolutely. What should you do? The right way to do this is to be reliablefor yourself. We took care of reliably delivering this thingall the way across the Internet through miles and miles of fiber optic cables and harshvacuous space, the least you can do is reliably deliver it from one piece of your app to theother. The right way to do this is persisting it. When your service wakes up to receive a notificationfrom the billing, it should persist that to some sort of storage. I don’t care if you want to use a file, SQLite,or whatever, then send your in-game message to say, they, go check your mailbox. Your app will check that and see that themessage came in and deal with it. If your app was sleeping at the time, then,fine, you don’t get the notification that says, hey, go check persistent storage. But the next time your app starts up, thefirst thing do you is check for persistent storage. A purchase came in. Congratulations, you have a hundred more Galpinbucks or whatever it is you are giving away. The user can immediately see that they did,indeed, purchase and get value for the money that they just spent. >>Dan Galpin: Let’s go quickly on to 9. Let’s take a quick talk about testing. We have a lot of devices and the problem withlots of devices is people are trying to figure out, how do I test with this vast ecosystemthat we have out here. But the truth is, most of this stuff is actuallyreally straightforward. Input devices, there are not that many inputdevices on Android and you should support as many of them as you possibly can. Form factor, it’s pretty straightforward. We don’t actually have that many differentform factor styles in Android. You have to support a series of aspect ratiosbetween 69 and 133. And it’s not the end of the world for mosttitles if you started off the design of the title to support that. If you decided you will support one aspectratio from the beginning and then you are, like, oh, my goodness, I am now going to Androidthat I have to support four, essentially, then this is going to be a rough transitionfor you. It’s good to start off designing for that. Even if you haven’t designed for it, thereare things that you can do that are fairly straightforward to make it look like you designedfor it. OS version, that’s pretty straightforward. The OS versions don’t differ all that much. It’s pretty easy to get. Here we get to the hard stuff. The driver stack and the GPU hardware. There’s kind of two things to look at. One, of course, is — this may be hard tobelieve, there are sometimes bugs in drivers. I’m sure none of you have ever experiencedthis on any other devices, but it actually happens. GPU hardware differs. Let’s talk quickly about the most common GPUsyou will see in the Android world. We have Adreno, PowerVR, Tegra, Mali, Vivante,and Broadcom. Many of you probably haven’t heard of thelast two, but they are in many devices as well. All of them essentially work differently thanPowerVR. So if you all go and say I just tested onthat second one, if you only test on the Galaxy Nexus, if you only performance, profile andoptimize around the Galaxy Nexus, you will be sad. Because on PowerVR usually you get a lot ofperformance by sorting things like by materials. You pretty much want to ignore sorting thingsby geometry, depth, and complexity. On every one of these platforms, you get anenormous performance boost by doing that. you want to have your engine and rendererto be able work both ways. First of all, performance, there’s that element. Also we have several different texture compressionformats. If you want the highest possible performance,and all of these devices are ultimately fill limited. Then of course you want to use the best texturecompression possible. So for your non-alpha textures that are actuallyfairly light photographic, you can use ETC1 on every single one of these platforms. But when you get into things that are usingalpha, then you’re going to be stuck going to one of the proprietary formats or usinga shader and 2EC1 textures which will slow things down. These are decisions you have to make as tohow optimal it is. You want your game to be how necessary itis to make these optimizations. We actually support multiple APKs based upontexture compression formats. So you can have a separate APK with a separateAPK expansion file. There are ways to tackle this problem. And again, it may not be necessary for yourtitle. The thing to do is make sure you have oneof at least four of these, probably the top four as they represent the largest majorityof devices out there to test on. And that’s just the most important thing. If you are doing a 3D game — if you’re doinga 2G game, chances are you may not notice. But if you are doing a 3D game, it’s importantto make sure that you work with these different drivers. >>Ian Lewis: Excellent. Thing 10, I took a little bit about play listings. So let’s say that you have done everythingthat we have asked. You’ve got a great game, great ratings. You didn’t screw up the in-app billing. You didn’t do anything shady with your permissionsand we totally want to feature you. One problem. We need to actually get you into the store. And where a lot of people end up having problemsis on the listing itself. Now, it may not be obvious but when you uploadthe gigantic graphic that we use on our web site, you are also actually uploading thelittle itty-bitty graphic that we use on the device. >>Dan Galpin: It looks gruesome in both modes. >>Ian Lewis: It really does. We chose this graphic, A, because the gameis featured this week. B, because it does have a serious problemin that the contrast here isn’t really great enough for you to be able to read the titleShane Reaction when that thing gets shrunk down to about an inch across. What I will usually tell people to do is attachthis to, like, Gmail or something that does a thumbnail preview. Get up from your desk, walk about six feetback, look at it on your web browser and ask yourself, can you still read the title? Does it still look good? If it doesn’t, then it’s not going to lookgood on a very small form factor device. So be careful to give yourself enough contrast. Use a large enough area for the title. And be a little careful of subtitles. You can see for instance on Real Soccer, althoughthey did a great job of making the RS and the Real Soccer big enough to read –>>Dan Galpin: Dude. >>Ian Lewis: Oh, wow. >>Dan Galpin: That was a software update thatcame right in the middle of our presentation. >>Ian Lewis: Thanks Google. All right. So, yeah, when you look at that on the smalldevice, the subtitle gets nearly lost. We usually tell people that if you’re usingabout 50% of the surface area of your graphic for your logo, that’s probably going to showup okay. If you are using less than that, you willwant to do some serious testing to make sure that it’s not going to become Illegible whenit gets tiny. Speaking of feature graphic, sometimes peopleomit them entirely. Like this famous developer, who apparentlyknows nothing about Android. At least a few people recognize this game. So the problem with this now is that sincehe didn’t upload a web feature graphic, we are actually unable to feature the game atall because we don’t have anything to put in that space. You might say, oh, can’t you guys use someother graphic, wouldn’t that be smart? Sure, but you know how software works. We totally don’t have that pipeline. Some day we will, maybe. But not today. >>Dan Galpin: Besides, would you want to chooseone of these random screen shots? It doesn’t make any sense. >>Ian Lewis: If you don’t have a graphic hereon your web store listing, you’re not going to get featured. You’re also not going to get featured if yourdescription is terrible or if you use this space to do some key word spamming or if you’vegot, all capitals, super excited stuff. Or if you say things like now the hit gameon this other platform finally comes to Android because it sucks less or something, you know. [ Laughter ]>>Dan Galpin: The feature team loves that. >>Ian Lewis: By the way, if you’ve got a screenshot here or more commonly a game play video that ends with a spinning shot of some otherdevice with a now available on some other store, that’s sort of a party foul. You don’t want to do that. We won’t feature you. We will get on the phone, can you upload adifferent video. But save us both some time and don’t do that. >>Dan Galpin: Another thing to note here. There are rules against spamming and key wordspam in here. So you should actually go through the GooglePlay terms of service because one thing you don’t want to do is say, if you really likedblah game and blah game, and blah game, you should like our clone of it. First of all, it looks kind of awful to dothat. And second of all, it is key word spam asfar as our team is concerned. And it can actually get your game, believeit or not, suspended. So it’s actually a very serious rule. They don’t want people to try to leverageother games’ key words. >>Ian Lewis: The other thing about this descriptionis, although we don’t want you to key word spam or use other service optimization techniques,there are an optimization that will boost you in the search ratings. That is to make sure that your descriptionis localized. If your description is localized into theusers language, then that description will appear higher on search results compared tosimilarly-ranked queries that are not localized. People say what should I localize into? And the most common response is going to beEFIGS-CJK. English, French, Italian, German, Spanish,Japanese, Italian, Korean. But if I had to pick two of these, the firstis English because, you know, we’re white dudes. But second if you can only pick one non-Englishlanguage, you will probably best — now, of course, this isn’t advice that is universallyapplicable, you would be better off with Korean because Korea loves Android. It’s a huge, huge market for Android productsand Android games. So you go there and then maybe Japanese. >>Dan Galpin: Japan is pretty awesome. It depends on the title whether it is culturallyimportant. Most importantly, point 11. >>Ian Lewis: Because it goes to 11. >>Dan Galpin: Make a great game. I know, I know. So obviously as we said before, editorialprocess. Ultimately, making awesome games is the wayto get featured. But if you do all of those other things, you’regoing to not get featured. So we’ve told you what not to do and now goout, make awesome games. Don’t let these things block your games fromgetting featured. We wanted to thank you for coming. We are out of time. [ Laughter ][ Applause ] >>Dan Galpin: We actually don’t have timefor Q&E. Ian and I will hang out after the sessiona and answer your questions individually. Thank you all for coming to ten things Androidgame developers should know. >>Ian Lewis: Don’t forget to catch our YouTubeshow every Friday 2 p.m. It gives us an excuse to drink beer and youinformation for games we are looking at featuring and why or why not they might not pass ourreview process.

Leave a Reply

Your email address will not be published.