Strategy for selectively enabling features in a mobile application - android

Assuming an application that has no login, how can one go about allowing some of its user access to activate 'hidden' features.
An example I recently came across is the need for some users to see a different version of the data feed the app is using (official feed vs editor feed which is being modified/approved)
In android, I assume that we could just point those user to downloading a specific file and test for that file presence in the app but I dont believe this approach can be used on iOS (sandbox).
The approaches I came up with:
Hide an activator in the UI: specific touches/gestures, invisible button and the like
Make the user visit a site which sets a cookie when on a specific page and test for that cookie's value in the app to enable features.
Did someone came up with a more elegant solution?

You can try any AB testing tool like Optimizely , Apptimize, Taplytics or MixPanel
They will help you to try new features by enabling them to only a group of users. Also you can set goals to each variant so you can compare how they perform.

Create a settings bundle. Then the user can just go into the Settings app to switch your 'hidden' behaviour on and off.

In iOS you can register an association between your app and a file extension. Then if you send an iOS user an email containing an attachment with this file extension, iOS will open your app and you'll have access to the file. You could save to the sandbox from there.

Just Like In-app purchases, when user completes a purchase some of the features in application gets unlocked.
I think best approach would be to have data maintained on your server end, the users vs features and in splash screen you get the response from server which of the application's feature are enabled for this user using a service call.
Obviously you must be needing some kind of business logic to implement the flow of enabled features in the application and that is totally up to you whether you use SharedPreferences of keep the information in txt or some other files.

Related

How to connect a device to a SDK?

I am currently working on a web app dashboard interface, the interface is basically a QA debugging tool, that will allow it's users to run playtest sessions. On my understanding terms, the dashboard connects/registers a game through an SDK key. the SDK key origins are generated in the web app and are used on a panel on Unity that our devs created and it successfully links a game to the web app interface.
I want to include a feature which will enable a user to connect their smartphone or tablet to their user profile in the web app...
Q. How do you connect a device,(a mobile device or a tablet) to the Web app, how do I get a user to register its device on their user profile and which informations should I provide and/or ask a user in order to do so?
notes:
1- I am not a developer, I am a UX Designer, I remembered this website which helped me in the past with some front-end questions and the devs at work are currently unavailable to answer to my endless questions. so I am doing this of my own volition.
2- On my understanding terms, I know that a device is linked via its device ID, which changes from app to app.
3 - if my question is not eligible for this site, please at least refer me to a better source. thank you in advance!
Thank you all !
It sounds like you want a tool to connect to this SDK (is this the Unity SDK?) and create fake game session data.
If that's the case, you'd use the SDK just like the actual game would. The only difference is that you don't want your QA tool getting its own id, but use the id of the game apk on the device? If this is indeed what you need to do the following methods should help:
Method 1: You're sharing various bits and pieces of data between the game and the QA tool
Set up a special permission in the actual game with the protectionLevel = signature (e.g. com.somegame.android.permission.PRIVATE_ACCESS). This documentation page on permissions should be useful
Have a BroadcastReceiver, ContentProvider, or Service in the main game that requires the above permission (Exactly which one you'd use depends on how much data you're sharing).
The QA tool declares a uses-permission element in it's manifest with the permission stated above
Sign both the QA Tool and the Game APK with the same keys
The QA tool and the actual game can now communicate with each other through the means you've provided above
The advantage this method has over the next is that even if you haven't run the game before, the QA tool can trigger the registration process in the game and get the id, without requiring you to actually ever run the game.
Method 2: All you need is the ID
Specify the same sharedUserId in both the actual game and the QA tool's manifest (see here for documentation)
Once the game acquires its id, it writes it to its SharedPreferences (preferrably a named preference file as opposed to the default)
The QA tool can now read the preference file (be sure to use the same name) and obtain the ID. The drawback here is that the game must have run before and saved its id in order for the QA tool to access it.
Method 3: If your game runs in a webview
Use a Javascript interface to obtain the info from the webview
Method 4: If your game runs on the web
Directly use the game APIs to access the id. Retrofit would be a great tool in implementing your API calls.
The wording in your question makes it rather difficult to exactly understand what your goal is. I suggest you consult with your dev to come up with a better problem description.
Best of luck.

Merge a Facebook login app used for Android with an iOS one, or migrate users to new one

A legacy setup we have means that we have the following:
Facebook app used for login onto Android devices
Separate Facebook app used for login on iOS devices
The issue this has caused is that if a user switches between devices they get a 'this email address is already in use' message from our server.
I need to find a way to get any users logging in on the two platforms to just be able to do so, and i assume the best way to do that is to:
Add Android as a platform on our iOS login
Change the Android app to use the 'other' login/app id (iOS)
Log everyone out on next release of our app (on Android)
Re-authenticate those users on Android as they log in (as we are making them use a new app id)
The key thing is for us however, that
The Facebook login is associated to their entire account (which is hung off the email address) and they have lots of content in there, so we cannot get those Android users to lose anything
We need to let them do this because we WILL already have used that email address if they are logging back in
Will the above strategy work to do this? Any pointers or recommendations on best strategy for this would be hugely appreciated.
You can use this API to link your users across the two apps: https://developers.facebook.com/docs/apps/for-business
Just keep the two apps as separate apps and link them under a single business. Then, when a user logs in you can check if they have already logged in before using the other app.

cordova detect if app was downloaded from Google Play

I'm making a Cordova 4.0 Android app that will be sold in Google Play, and I would like to prevent illegal use of it (for example preventing someone to extract the APK from the system and re-distributing it).
One theoretical way of doing this would be by checking that when the app is launched by the user, he did actually download it from Google Play (versus being it sideloaded). I'm not even sure if this is possible or if there's an alternate way of doing something like this.
One way that works in other cases is to use require some sort of login when accessing the app, but in this case I can't do that. Any advice would be appreciated!
Google offers a way to implement validation / licensing:
http://developer.android.com/google/play/licensing/index.html
Take a look if this is what you need!
One suggestion would be for those apps which are get connected to a server to fetch some data.
App verification token
Generate an encoded 64-bit long token and store on both device & server as well. This will be a unique token per app
Whenever app tries to connect to server, it sends the device token details. Server needs to verify it before fulfilling its request.
On specific events, server can generate a new token for a device.
Same way, device token can be mapped to a user or an app on the server side.
Token could carry some app related information, for instance.
first 4 or 6 digits represent app size
second block of digits could represent user specific or device or some other details
Or another block could hold app contents modification date
In case of any change, server could verify the app size, last app contents modification dates, etc.
Generally it is recommended to uglify, obfuscate and minimize app resources before submission.
You can use the package manager class to determine the source of an app (only google or amazon currently detected)
You can similarly use google analytics which gives same information.
This is pretty neat since Android stores the source of every package, allowing apps to know where they came from, to prevent piracy and sideloading.
Great if you always publish to google or amazon. Useless if you sideload your app.

Modify the Facebook account or privacy settings via an Android App

I am developping an Android application that uses a Facebook component. It would be something to simplify the management of the Facebook privacy settings with the user only having to push 2 or 3 buttons to apply a whole set of privacy parameters to his/her account.
For example, by pushing the button "paranoid", my settings change as:
default privacy for new wall posts = only me
secure browsing ON
...
And by pushing "free givaway":
secure browsing OFF
default privacy for new wall posts = everyone
...
Just an example.
I'm just beginning, so I had a look at the Facebook SDK for android, implemented the few examples like the Hackbook, etc.
But I'm still wondering how to manage privacy settings. I understand it would be a security concern to let an app manage that kind of thing, but why not?
Since I couldn't find a clear answer inside the bowels of internet, my questions are:
Is it doable? Or even partially?
If not, why? Will it be possible in the future?
If yes, how? What part of the API should I use?
Thanks.
This is not doable via the graph API because managing settings isn't available to write/update. I am almost positive this will never be available via the API. The Facebook native app may or will allow this but Facebook itself makes that app and doesn't use their own api for their app.
If you really wanted to do this, you could break Facebook's terms of service and do this via scraping Facebook's desktop site.
https://developers.facebook.com/docs/reference/api/post/
From Above link : The value field may specify one of the following strings: EVERYONE, ALL_FRIENDS, NETWORKS_FRIENDS, FRIENDS_OF_FRIENDS, CUSTOM

How to obtain information about downloads, total installation, and active installation from my published android applications programmatically?

I have a few questions regarding android market(Google play). How can I list my published application by accessing from my google account? What I have done so far is using my application package name as a query string to search my application and display all information which I used android market api to do it. Is there another better way to display all my published or installed applications by accessing from my google accounts?
My second question is about detecting number of downloading and installations of my published application. I have found only google analytics so far(for free) which I need to embedded some codes to monitoring my application. Is it possible for me to access those information from android market publish page . I have found that publish page contains information that I need.
Edited: For second question, I would like to obtain statistical information without adding any new code to my application. Is it possible to provide only google account to grant the permission to get those information?
My application is published. If I am using google analytics to monitoring my application do I need to start my counting from zero?
Sorry for my English and my little knowledge about this.
Thanks in advance..
Edited: .. I have found an application, called "analytics" that is what exactly I want to do. But I still cannot figure it out how it works..
The only place you will find this kind of information is on your Developer page. That said, if I were wanting to do what you are, I would put up an app on App Engine that either parsed my Dev page on request, or on a schedule. I mention App Engine as personal preference here, you could obviously use anywhere you can host scripts on.
You can then do what you like with the data you have collected, and your app can request this from your site. Assuming you have no qualms with publicising these numbers, you wouldn't need to scare users by authenticating, and would just need a plain html request.
Edit:
In your language of choice, you would need to request your developer page (the one that lists apps and their install count) and would also need to authenticate as yourself to get it. It's for this reason I would use your own hosting if you can. I can't be more specific than this, as I don't know what language you're most likely to be using. It should be trivial to find out how to do an html request and step through the page in whatever language it is though. App Engine pages are written in Java or Python and deployed to the server, while other obvious options are PHP or Perl. On my own server I would most likely use Perl as it's ideal for ripping up html with regexps.

Categories

Resources