We have developed an Android application and pushing the new installations & updates through MDM (Mobile Device Management, Soti Mobi control). The update sent, silently upgrades the application without user's confirmation. Due to this, if application is in use by the users, is automatically stopped, upgraded & started from the beginning and thus users loose their important changes which they were suppose to send to server.
Is it possible in the mobi control to configure an update with a prompt to the user (similar to what it comes when we manually upgrade to the newer versions' APK)?
OR
Can I override any life cycle method which would be invoked on upgrade event, and if users' changes available I would like to abort the update?
Android MDM protocol (called Device Admin) doesn't have API to install/uninstall/upgrade applications.
So, pushing an upgrade isn't build-in Android feature, but rather a feature of Soti Mobicontrol application. I think, it make sense to contact them with this question.
Related
I have a new project at hand where I need to make two android applications
1)Main Controller application (be installed in one device say its name be X)
2)Sub Child application (be installed in devices that need to be controlled by X )
So I want to get an idea/picture about how one android device like (2) can be managed fully(i.e. blocking applications or making them accessible for some interval / block calls / track location of user ) from another device like (1). So far I searched Google ,asked my seniors about the same but none was able to help me out.Found many scattered info (like need enterprise app to do this i.e use android management API or Device admin ) but not being able to get any clear idea about the work flow.
Thus now this the last place I can think of for helping me out with this work flow.
Reference
Update: Based on what #Fred said i.e. to use android management API (also based on the answers that he posted here) could we somehow have own custom web server and manage the interactions that EMM console does with all the child apps through our own API's(the same API's which we would call from the parent app.) ???
In other words instead of controlling form the EMM console, I would like to control those child application from another parent android application.
By FCM or Socket programming you can easily communicate with other app. Suppose 2nd app receive a call then 2nd app call a api of server about the information, then server knock 1st app by fcm or socket, then 1st app make a decision and submit the decision to server by API, And finally server submit the decision to 2nd app by FCM or socket.
You can check out the Flyve MDM which is an open source mobile device management solution including both agent app and web panel for management.
I'm working on an application that uses Airwatch to enter the device into a single purpose device when only one app is opened for a user (not by Knox sealed mode) and also uses Knox SDK to manage device settings, etc.
I'd like to block system notifications when the app is in a kiosk mode (or it more preferably to block any notifications like a low-battery in any mode, not only a kiosk).
How can I do it using Knox SDK or can I do it using Airwatch?
As from official Airwatch response: there no such functionality in Airwatch and an appropriate feature request has been created in the internal tracker.
Unfortunately, there are no any estimations because of internal feature prioritization should be done.
We have developed an Android application and pushing the new installations & updates through MDM (Mobile Device Management, Soti Mobi control). The update sent, silently upgrades the application without user's confirmation. Due to this, if application is in use by the users, is automatically stopped, upgraded & started from the beginning and thus users loose their important changes which they were suppose to send to server.
Is it possible in the mobi control to configure an update with a prompt to the user (similar to what it comes when we manually upgrade to the newer versions' APK)?
OR
Can I override any life cycle method which would be invoked on upgrade event, and if users' changes available I would like to abort the update?
Android MDM protocol (called Device Admin) doesn't have API to install/uninstall/upgrade applications.
So, pushing an upgrade isn't build-in Android feature, but rather a feature of Soti Mobicontrol application. I think, it make sense to contact them with this question.
Can any one help me out how to do MDM Integration in Android from client and server prespective?
I want to do an enterprise application which having lock and wipe functionality. I have no any clue of workflow of MDM in Android.
Thanks.
Android Device Admin API will do both things what you want to do (lock/wipe device and even more). An example is given and also you can find this complete source code in your Android SDK directory.
Now as client server perspective:
You have to implement your task (lock and wipe) in your android application (in client, i.e. known as agent). Now your application should be capable to communicate with your server or vice-verse.
I am 100% agree with adamk as he said "Remote controlling your application remains exclusively your responsibility - the Android framework does not provide (or enforce) any solution for that."
And Android gives your this feature too, as adamk said to use C2DM, he was right but now C2DM is deprecated, and GCM has been introduced, “a service that helps developers send data from servers to their Android applications on Android devices.” The service can send a message of up to 4 kb to an application on an Android device, most often to tell the application to retrieve a larger set of data. GCM will now handle all queueing and delivery for messages to Android applications.
You should read how to use GCM, and you can find sample code too. Download GCM Android Library from SDK Manager
and check android-sdk/extras/google/GCM directory
After establishing successful communication between your agent and server, evaluate msg in agent sent by server and perform desire action (lock/ wipe). This is again up to you how you define your message payload and how you handle those payloads in agent application.
Here is an article about Android MDM.
Happy Coding :)
You can use DeviceAdmin to gain privileges for managing the Lock preferences and performing device wipe (among other stuff).
(The user must add your app as a device administrator beforehand)
Remote controlling your application remains exclusively your responsibility - the Android framework does not provide (or enforce) any solution for that.
You may want to consider using Google's C2DM API, which is a convenient push mechanism.
As mentioned in the above answer, DeviceAdmin API can help. If you are using an Android device, you might know about the Android Device Manager (the web-based version) which allows you to manage your device. Basically, you can track, locate, lock, and wipe your device, some of the basic features of an MDM solution. So, in coding (though I am not a coding expert), you need to get access to the Device Manager (I guess, using some listener codes, or notification access).
Apart from this, MDM allows creating policies and groups of users (which would be a part of the coding in the app itself), then pushing the command over the internet (or OTA) to the connected device.
MDM also allows managing Apps and Data on the device, for which, you need the app to get access to the internal as well as external device storage.
Hope this helps. Good luck creating your MDM software
Is it possible to check on startup of an Android app whether the user has the latest version of it and force him to update if he has not?
Or at least checkt whether there is a new version and tell him, that the app only will work again when he downloads and installs the update?
Background is that I have an app that needs to communicate with a server. When I change something in the interface between server and client I want to assure that the client has the latest version.
Is there any native way to do this? Or do I have to check this on my own?
I don't think there is a native way to do this -- but coding it yourself shouldn't be too hard ; you'll have to :
Implement a version check : make a request to your server, and have your server return the last version number
Then, if the version number gotten from the server is higher that the application's one, ask the user to update.
You could even do this at each request -- just include the version number in each response from the server.
Might be useful in case the user resumes the application, instead of re-starting it from your "first" activity.