How to present settings to the user in an iOS app? - android

For my current project I need to develop both an android and an iOS app. I never used iOS in private so I am not really sure about the best practices and how a user would expect my app to behave.
In android I provide the user with a custom view which offers different options (server IP, port, language settings, GUI settings, ...) which can be directly accessed by clicking the settings icon in the upper right border of my app. How would one do this in iOS?
What I've read by now is that there is the possibility to provide an settings bundle which will lead to an entry for my app in the system's settings app. But this means the user would have to leave my app to change his settings, right? I looked into a few standard iOS apps (Calendar, contacts, camera, ...) and it seems all apps use the settings bundle but there is no possibility to access this directly out of my app.
Would it be bad iOS practice if I offer a new view that can be accessed by the navigation bar and where the user can change those settings? How should I store them to be persistent over many app restarts? In Android I use the SharedPreferences object which is quite convenient.

Depending on what you are trying to store, you could store them in UserDefaults, or if it's something you need to store securely you could use Apple's KeyChain. Both of these will persist across launches and can be updated, appended to, or removed if needs be.
You can add a settings bundle as you've said and then in your app, you can hook a button up to present that settings screen to the user - so they wouldn't have to background your app, scroll to settings, find your app, etc., it'll be presented to them straight from your app.
Many apps also do their settings in the app, so it's really up to you - there is no hard and fast rule.

Related

How to interact with another android app in tamper-proof way

I am developing an app, which is soft dependent on what a user does in another app. E.g. my app may allocate a reward to to a user who shares our image on Instagram.
What can be the best way for my app to verify that the user has done this action. Let's say no API is available for me to verify existence of such a post on Instagram.
a) Does android allow one app to programmatically interact with another. To what extent this depends on what the other app allows, vs certain general features of the platform which are always true irrespective of other app's intention of preventing such interaction?
b) Secondly, if I go the brute force way (provided user permits), can I simulate user actions and launch the other app and interact with it on behalf of the user, much like using the Win32 API and simulating a mouse click or keyboard input?
c) Basically, I just want a screen shot of the user showing me the post has been shared. My simplest goal is to verify that the screenshot is indeed from the other app, and not a static image or a fake app looking like the original?
Any guidance or general advice would be greatly appreciated.
Thanks
Asif

Modify or disable Google Smart Lock behavior in Android apps

I added Firebase integration to my Android app and unexpectedly ended up also getting Google Smart Lock password management behavior for free.
Although I am reasonably happy with the behaviour, I'd like to modify it ever so slightly.
The unexpected behaviour: I have a login dialog that's used to provide credentials to SMB shares. Now that I have integrated Firebase, I end up with the following unexpected addtion to my login dialog box:
What I'd like to modify: I'd like to constrain the login credentials to the target device (i.e. do not share userid/passwords across different SMB target devices), in the same way that Chrome does not reuse credentials across different web sites. (I think accidentally sending cached credentials to a machine they don't belong to constitutes a mild security risk). For the given example, I'd like Google Smart Lock to prompt ONLY for credentials for \lothlorien.
Entered credentials show up in my Smart Lock credential cache in my browser as being associated with my Android application.
Oddly, I didn't do anything explicitly to make this behavior appear, other than (1) add firebase integration, and (2) name the EditTexts in my activity. It's an Activity, not a dialog box, although it does use Material dialog themes.
If there were some easy way to associate them with credentials for "smb://lothlorien" (for example), I'd go for that.
Given that I already have functionality to cache and store credentials, and given the non-trivial nature of the Google Smart Lock apis, I'd be just as happy to disable the Smart Lock prompt altogether.
Either fix would work for me. Associate credentials with a specific machine; or disable the feature in the dialog box.

One Android app to rule them all? (Alternative options to SSO)

I am working with several organizations. They have formed a coalition and have agreed to share apps they have created. The group is trying to implement a set of Android applications that will be used by first responders on shared devices during a high visibility event. The applications are all 3rd party, by various vendors, and since the group does not have time to implement an SSO solution, they are using an app called Keeper to allow the users to store their credentials in a database. This is not an ideal solution, but it’s a time crunch. The biggest issue that they are looking at right now is that, although they can set Keeper to log out of the Keeper app itself after a set amount of time, the applications that the user was logged into will all remain logged in unless the user manually logs out. This means that at shift change, unless the first user manually logs out of all of their apps, the second user will have access to all of their applications.
One of the ideas that they had was to create an external Android script that would allow the user to logout of all applications with a single click. But it seems like this would require access to session ID’s and other information from all of the 3rd party applications. If that were possible, it seems like it would be a scarily large security flaw.
Can anyone shine some light on this for me?

Strategy for selectively enabling features in a mobile application

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.

Automatically save url as launchable app on smart devices

Firstly, I'm aware of how to save a web URL to a smart device as a user as is explained in these answers (usually by saving the tab from the browser). These take multiple steps and vary depending on device, thus requiring research which most vanilla users of smart devices do not do.
Create a Android launch icon for Website
Add to homescreen on mobile phone
My question is from the perspective of the app owner. The end goal is to let create a link on the web app allowing users "Create Homescreen icon" from 1 click. I suspect this is not possible as it would create a huge security risk to the devices allowing random unsafe URL'S to potentially try and create unlimited shortcuts but I'd like to ask nonetheless.
Answers such as these make a URL support app creation, however it leaves the task of creating the shortcut to the user instead of the URL.
"Add to homescreen" button in Android does not show website as a Web App
I hope my question is clear enough, if it is not I'm more than willing to elaborate.
Chrome on Android two new features 1) Web App Manifest that describes what should be launched from the home screen and how it should look on the homescreen, and 2) Chrome now has an beforeinstallprompt event that will trigger for Web apps that we think are app-like and can be installed to the homescreen.
There are a number of criteria for the onbeforeinstallprompt event to fire.
The event only fires if:
The site has a manifest, is on https and has a service worker. (this can be quite a stretch).
The user has engaged with the site multiple times (right now, twice within at least 5 minutes).
The user has not already added your site to the home-screen.
If all you want to do is detect if you should display a banner to prompt the user to add your web-app to the homescreen then Chrome already has a solution for you.
We also have a full range of samples on our samples site.

Categories

Resources