Online Data Storage and Transfer with Swift - ios

I am trying to make a series of applications which require the user to make an account and login, therefore they could use the application on multiple devices and have the same data (e.g.. amount of virtual money and player score is about it), however, I have no idea how to go about this, I have decided it would be best for my app not use the apple GameKit (game centre) as it has a lot of limitations (e.g not showing usernames). What methods could I use to do this? Do I need to learn another language
Thank you

You can try Firebase, which serves as a backend especially for mobile applications. Basically, send a kind of a POST request to Firebase when the values you want to store have been changed in your game and send a kind of a GET request to fetch the said values to your mobile app(s). By this way, you can store data on Firebase and fetch it via multiple devices when the same user logs in from different devices.
For more information and a quick start, check this link: https://www.firebase.com/docs/ios/quickstart.html

Related

How do social networking apps update their UI in real-time?

I was wondering how social networking apps, such as Twitter, Facebook and WhatsApp update their user interface in real-time when another user interacts with the user of the app. To use the best example I can think of: when you have a chat window open in WhatsApp, the UI updates automatically (without any user actions required) when the user you're chatting with interacts with you. Messages appear on your screen without refreshing and the "last seen" status at the top of the screen updates automatically when your chat partner either goes offline or comes back online. I can think of two ways to achieve this:
Remote push notifications: this approach strikes me as the 'cleanest' way to do this, but it's probably also the riskiest way. Using silent notifications (content-available) to pass data to another device at the moment a user does something, would probably save you a lot of HTTP requests and therefore would make your app consume a lot less data and CPU usage. The risk of this approach is that a user can easily disable ALL push notifications to save battery power (including silent notifications) and then your app wouldn't be able to get notified on events remotely.
Local UI refreshing: This approach is obviously the safest, but I think it's really 'nasty' and eventually everyone would feel the downside of it. Constantly refreshing the UI and re-retrieving data from the database to make sure the latest messages and statuses are displayed to the user would be safe in the way that your app doesn't have to rely on the device's battery and background mode settings, but the downside is that this will make your app consume a lot of data and battery power, which would be bad for the user's data plan and his device. I also don't think Apple would approve of an app that's consuming so much data and power.
I've just implemented a chat function into my own app, and I want to enable the same real-time UI updating that WhatsApp uses. What would be the best way to do this? Should I use one of the two methods above or can someone think of another way to do this? By the way, I'm a relatively new programmer who just recently learned how to develop iOS apps (Swift). I'm very far from being a pro, so please go easy on the explanations and work method capabilities. Thanks!
The chat apps make use of WebSockets to create a constant connection with the client and a backend server.
This article on Appcoda can help you start learning about Socket.io. It answers your questions and also helps you to create a demo app.

(Swift) Get usage data from other apps through the battery page in settings

I am trying to make an app where it tracks the usage of other apps. I already know that this is impossible to do by directly getting usage data from apps that do not belong to you. I am wondering if there is any way to access the battery page in the settings app by using the code in swift.
All I want is to be able to read the data for hours used and use that data in my app. I know this is probably a stretch, but is there any possible way of doing this?
There is no API to read this data directly.
There is an app on the App Store which has a hacky workaround. It requires users to take a screenshot of the battery usage settings page. The app grabs this photo from the user's photo library and uploads it to their servers where it is processed (using image analysis and OCR). They use this information to estimate how much each app is used.

IOS building real time application

Well i am new to IOS development and want to create a realtime application. In my app i want to update data of tableview cell with real time information like we do with Google Drive shared sheet.
I am not using google drive but its an example. In my app i have a tableview which cell should be updated by realtime data. I have thousands of user groups and any member of group with access to modify can edit that data. So i need to reflect real time change to all other users of particular group.
The data can be anything like image, any formula or anything.
Well for that i have googled and found two options but i am confused which one should i go with.
PubNub library
NSTimer
Well i am not sure which one will be best suited for me. I have tried to create a demo app with PubNub but with heard luck i can't do more.
So can so please suggest me which should i choose or is there any other alternative. I am using Xcode 7.3 with swift 2.3
Thanx in advance.
PubNub is not based on Node, however we have many SDKs for over 70+ different languages/platforms, like Node and Swift. The network is a hosted realtime, data stream network (DSN) that the SDKs connect to allowing your app to send and receive messages in realtime around the world in < 1/4 second to 1 or millions of clients.
For more on this, read How PubNub Works?
You can use PubNub for free for up to 100 daily active devices and up to 1 million messages per month (plenty for a demo app).
You would use the PubNub Swift SDK to subscribe to publish and subscribe to some channel to update your app.
Please check out our Swift SDK docs to get started.

Real time syncing

I want to develop application same as UBER in which I need to show available taxis in the selected region and update as the taxis are hired, available, unavailable. Kind of auto refresh.
Calling the web service in the background after regular time interval is not a good option.
Can any one suggest me better and fast way to achieve this.
Thanks
Push
Use sockets when the app is running. This will give you immediate updates.
Use Push notifications when the app is not running (use notifications for critical changes), and ignore these notifications when the app is already running, in favor of sockets.
Pull
Use NSURLSession to refresh your local DB with some regularity. This is very resilient to network failure.
Use a combination of approaches, since speed and robustness are mutually exclusive. Ultimately, your objective is to keep your local DB in sync with your server's DB, and fire internal messages as data changes. No small task, hence the Firebase answer.
The Most Simple way is to work with Firebase . Its No sql database and you will have instant update as you change anything .
This Video will guide you how speedy you can get update without any loop for refreshing data in application .
Ask me any help you need regarding Firebase .
You can use silent push notifications to update your map with updated taxi locations.
I would suggest you take a look at CloudKit. There are several reasons.
If you decide to just build one app and somehow have driver
functionality that is different from users (maybe by having drivers
register and sign-in) then the app can post shared data to a public
online database accessible to all users. You could use information
in this scenario to post local notifications as the need arises.
As iOS updates you will not be dependent on third party libraries
If you decide to create a driver app and a separate user app,
CloudKit will allow you to share data across these apps.
Apple deals with the security and availability.
Overall the process is very easy to implement.
You can combine the local notifications with the public database to
schedule reminders, alert users etc.
CloudKit when done correctly will be essentially free. Just transfer
CKAssets rather than raw data and your transfer/storage limits
become negligible.
You can also access your CloudKit databases from external web
services/websites if you want to extend the data further.
You can use CloudKit subscriptions to sync up user information
automatically
NB - As pointed out in comments this is new technology. It is in the
second generation and I prefer it because if one uses it creatively
then you can simulate the external push notification behavior together
with background support. CloudKit removes the need for a third party web server from which to push the external notifications (as the real notifications take place by writing to the shared database).
Check out my detailed answer on SO for sharing the data between apps with CloudKit. Here is a link to some CloudKit videos that further describe how CloudKit works. Apple has lots of documentation and sample projects available. You can review the developer website for more info on CloudKit.
CloudKit Quick Start

Twitter integration the way Klout works

I'm designing a service similar to Klout, this is, the user's twitter account is scanned continuously in order to update some sort of metric which is the added value of my service. For this to work my app needs to be approved by the user, but I'm a little bit confused on what to do next. How I ( efficiently ) manage to keep my service in synch with user's new tweets after he/she has approved the app from the first time?
Thanks in advance.
Two solutions assuming you have a user's OAuth tokens:
Poll the user's friends/followers/timeline everyday and analyze it w/ the REST API. Beware of rate-limit limitations.
Use the streaming API to get this data in realtime and then analyze.
I'm sure you'll want to use #2. Create a listener that receives the push events from twitter and then store it and run your business logic analysis on it later.
The data model you will use and prescience (DB) depend on what business logic you need to run.

Resources