I've been noticing for the last month or so that users of my Android app are receiving partial updates. What I mean by this is that their version is up to date and has most of the features that I had made live, but at the same time would still have code that I had changed weeks earlier. This did not affect users that did a clean install though, just the 99% that probably update an app like a normal user would. I could see how this could easily be caused by a lapse of concentration while using "git add" however I've exclusively used "git add -A" for probably the last two months so this is not the case. Recently I got fed up enough with it that I purposely changed some of the log statements here and there just so that if I ran into another user who's phone had partially updated, I could check it out and see what files were up to date or not. Amazingly, I found a mix and match of updated and outdated files. I contacted Google via chat and they said that they would transfer me to an email conversation with a technical representative, but I haven't heard back yet. Has anyone else encountered this issue and how would you go about solving this?
Related
I have a problem with my Google Play Cloud api. I tried to find some sort of support and was lead to Stack Overflow. I am using the "google play game service" for my Unity-based game (to store the save-game via Cloud).
Since my newest releases I had a small issue with the GPGS-implementation, which I fixed immediately. Every error disappeared after my fix. But since the patch last month, one error still remains with 100% appearance:
"google.play.games.games.v1.Applications.RecordApplicationActivity"
I can't find anything online about similar issues or nearly the source of this call, to fix this on my own.
I can't reach that bug via testings on my test-devices, nor does it seem to affect my users dramatically, but an error is nothing I should ignore...
What things can I do to investigate this?
This is the most detailed Error-Help I can get
Always check your SHA1 key!
I assumed the guide next to the SHA1-Input to get the SHA1-Key was the right one for me. Apparently there are 2 SHA1 Keys (one "SHA1-App-Key" and one "SHA1-Upload-Key")... And you don't even need that "cmd-guide" from google. If you already uploaded your app, you can find BOTH keys in the google console. Under "Release" & "App-Integration".
As at August 2015, the 'Drive API for Android' is not functioning as (loosely)documented, is effectively broken. The main sore points are as follows:
1) An app sharing the same APP_ID and logged in with the same Google User is meant to be able to find and access the same files as Google indicate (e.g. appX on device1 creates a folder named 'blahblah' (where no 'blahblah' folder already exists in the User's Drive), appX on device2 should be able to find that folder and upload/download files from it also...however this is not the case (or if it does work, it is intermittent and mostly not working at all)). This remains the case even after (many) requestSync calls and over 72hours of allowing Drive to sync itself.
2) A trashed folder is not observed as trashed, even after a requestSync call has succeeded. Such a trashed folder will still have isTrashed==false.
3) A permanently trashed folder (i.e. it is GONE from Drive, it is never coming back). Can still be found and "successfully" have folders and files created within it, however writing to such a file's contents will always yield a failure in Completion Event Service. Again, such a folder will still have isTrashed==false (which is abysmal).
Bug reports have been lodged (thanks to #DalmTo for the link) via: https://code.google.com/a/google.com/p/apps-api-issues/issues/entry?labels=Type-Defect,API-Drive
https://code.google.com/a/google.com/p/apps-api-issues/issues/detail?id=4003
https://code.google.com/a/google.com/p/apps-api-issues/issues/detail?id=4004
SO, the question: know a way around these issues?
UPDATE:
I've narrowed these problems down to my personal Google account (or my personal Drive, which has many, many files in it). That suggests these issues are symptoms of or closely related to https://code.google.com/a/google.com/p/apps-api-issues/issues/detail?id=3905
I can give you some points regarding the issue 1/ (syncing on multiple devices running the same app). I've been pointing out this already in April 2014 without satisfactory answer (actually resounding silence). So I switched back to the REST API and handled everything myself (using syncadapter, service, ...). The REST's algorithm is:
create/update/delete/ .... (execute() method)
dispatch resource ID ('id'+message) using GCM to other devices
let other devices deal with the change through the REST API (again, in service)
I've re-visited the GDAA a few times since and never got satisfactory results (requestSync). Finally, I got half-way happy when started to use 'completion events' (a year later, needless to say).
Again the algo is:
create ....
get ResourceId from completion
dispatch 'ResourceId'+message using GCM to other devices
let other devices deal with the change through the GDAA (using the ResourceId)
... and the point is:
During the time I was trying to make it work, I finally realized that the GDAA is not well suited for all applications (like the one we're discussing here). The GDAA goes through all kinds of hoops and loops to make the online/offline state transparent and at the same time to cache data and optimize network traffic, battery use, ... It creates latency, unpredictable states...
... so, in the end I stopped blaming the GDAA for not being a swiss-knife and do everything everybody ever dreamed up. It is up to the developer to FULLY understand the advantages / drawbacks of a toolbox he/she is using and decide upfront which tool to use. I know, the docs do not spell it out and believe me, I myself got caught in Magnus's excitement. I still remember pinoyyid's warning in January 2014, telling me not to jump in too early.
Good Luck
As per your response on the issue tracker, we believe this is an issue with sync for your particular account, potentially related to this issue. We'll continue discussion of this issue on the issue tracker.
I've written a program that, when completed, I plan to add to the Android Marketplace. I have given many files as features for users to store information and reload later, and while debugging, I've noticed the files tend to get deleted when I update the code after a long while (like a few days spread apart--for some reason, it doesn't happen when I update the code often, like every hour when I'm adding new features and testing them out). Note that I use a real phone for testing and not the emulator. What I'm wondering is, will the files get deleted after each release of the app?
I really don't want users to lose their stored information on every update or bug fix I provide, so if that is the case, is there a way around this?
Nope the files doesn't get deleted automatically, but it depends upon where you are storing the files. If the user deletes the app the files associated with it will get deleted too. But in case of an upgrade, No! normally it won't.
In case you are using SQLite for storing data, there is a proper way to handle upgrade there.
Periodically I'd like to make very minor changes to an app on the market, that don't justify notifying users that they need to upgrade. For instance a little cosmetic tweak. Basically I don't want anyone (including my client, for whom I built the app) to notice that I made the change, but I'd like all new downloads to get the changes. Can I do this, or will making any changes cause everyone to be alerted there is a new version?
I understand where you're coming from but this is a very bad idea. If it were possible you could have a bunch of people with the same version numbers but a different program making it very difficult to track if something goes wrong.
You can however increment only the integer version and leave the text version the same (this only shows in the market anyway).
This will still cause people to get auto updates for your app. I think you should either bundle all your changes up and wait or just accept that everyone will be getting lots of updates for your app.
Unfortunately Prashant's answer is not correct. You only need to increment the code, not the human readable version string.
I frequently leave the user visible version number alone when releasing minor tweaks and bug fixes, saving the market visible version numbering for actual features and major bug fixes.
Well last time i tried to the same thing, i got a message that application version numbers needs to be incremented before uploading a new version of the application. Also, version number and version code need not be in sync. But both needs to be incremented before uploading the new apk in market place. Hope this helps.
So, I have found a bug in a specific sdk that causes it to fail on some Android phones after re-installing a new version of an app which uses the sdk (via adb install -r, and presumably when a user gets an update that has been pushed to the Android market). Is there any way to force an application's data to automatically be cleared upon update of the app? I realize there are different ways that data could be stored, but I just need to essentially simulate an invocation of the "Clear Data" button that'd you find when browsing to the application in the "Manage Applications" section of the Settings (i.e. I just want all data gone).
I am an Android noob and am doing minimal Java coding on this project, so I am basically looking for the simplest solution here. I suppose I could settle on storing a "currentVersion" to disk and then checking it upon launch every time to see if the real current version matches the version that was written to disk on the last launch. Is that the only real way to do this? If so, what's the simplest way to do so?
Thanks!
Is there any way to force an application's data to automatically be cleared upon update of the app?
No, at least for my definition of "automatic".
I suppose I could settle on storing a "currentVersion" to disk and then checking it upon launch every time to see if the real current version matches the version that was written to disk on the last launch. Is that the only real way to do this?
I'd name it lastKnownVersion, but otherwise this approach seems sound and probably is your only viable option.
If so, what's the simplest way to do so?
Ummm...do exactly what you said. Use Java I/O (storing the file somewhere inside of getFilesDir()), or SharedPreferences.
Bear in mind, though, that your users may get rather frustrated if you blow away their data on an app update. Personally, I'd rather we find a better solution to your original problem ("I have found a bug in a specific sdk that causes it to fail on some Android phones after re-installing a new version of an app which uses the sdk").