When the user takes a pic on the iOS app, the following would have to be done (in no particular order):
The photo has to be uploaded to our server.
The photo has to be posted on to Facebook
What is the best approach to do this ?
Scenario 1:
iOS app uploads the photo to our server
iOS app uploads photo to the Facebook
Scenario 2:
iOS app uploads the photo to the server
Our server uploads the photo to Facebook
Questions:
Which approach is better (scenario 1 or scenario 2 or is there any other better approach) ?
Which approach is followed by other apps which do stuff like this. (apps like Instagram / Foodspotting ) ?
Based on what you are asking and the information you are providing (I don't know if there are other requirements), I would probably go for Scenario 2 for the following reasons:
The User Comes First: In this case, I am thinking about data leaving the user's device. Most people have a limited data plan, which means, you should try to use the least amount of resources possible (in this case, data & their attention span).
You have more flexibility: You can retry the upload to facebook in case of an error without disturbing the user. For example, if for any reason, you could not upload to Facebook on the first try, then you can retry without holding the user's attention hostage.
You have more control/measurements: Here I am assuming certain functionality about your app. But let's say you allow people to upload files to your server, but they can choose if they post to Facebook, then you can start seeing what percentage of your users actually post to Facebook, and start to see patterns about your users. This kind of information is always valuable.
Related
I'm trying to find a way of letting a user store their photos/documents online for my app. They can upload these to the app after registering an email and they remain on the phone even when the user logs out and then in again. However if the user deletes the app, downloads it again (the developers are using TestFlight at the moment), and logs in, any photo or document that the user saved before deleting has vanished.
I've been told that the data hasn't been stored on the Kinvey SDK service that we have been using as it takes a while to upload the data and then was told the app would be better suited on Kinvey REST API as the SDK version doesn't support background mode which supposedly would help store the data quicker (but this still wouldn't be 100% sure the photos/documents would be stored)
I'm not a developer/coder so I'm afraid I don't know much technically but my app needs to be able to have access across devices for the user's photos and documents, if these are 'lost' it would be catastrophic.
Please could someone help me if there a way of doing this?
Thank you.
Well If you want to save pictures or data that do not get deleted here are few options.
Save them iPhone,iPad gallery if not the use REST API
"Kinvey" can be used for that.
The alternative of "Kinvey", Kindly look into this.
https://www.raywenderlich.com/126098/top-5-parse-alternatives.
and may be you can try this. It provides chat feature too.
http://quickblox.com/
I'm a swift beginner.
I'm trying to create an app that essentially does the following :
Users can sign up and login to the app to receive a new recipe weekly in a pdf (or word doc) format. Once the new recipe of the week is ready to be viewed the users will receive a notification that "recipe of the week is ready for viewing" and they can then login and access the new recipe (as well as recipes from previous weeks).
One admin user will be able to login and upload these pdfs/word doc that contain the recipe and once the upload is complete, the other normal users are notified of this new recipe.
My question :
1) Is it possible to have different users in one app? (ie normal users and admin users). I just want to make the app easy to use for the admin (a friend who is not a tech and who just want to upload recipes) without having to touch the codes or needing me to upload them manually. If its not possible, what could be an alternative way of doing this, so that an ordinary admin user can just upload into the app for other users viewing pleasure?
2) I just thought pdf/word doc might be an easier way for the friend to upload the recipes into app (the recipe might contain pics, tables, graphs etc), if there is a different way of doing this, open to suggestions :) At first I thought maybe putting the recipes on a shared directory and getting Apple's DirectoryMonitor.swift to monitor the directory so that everytime the friend uploads something to the directory, the app will detect this and send notifications to other users....but I thought maybe this isnt the best way to do it, not to mention it might send false notifications (ie when files are removed insteaf of added..)
I do know the basics of Swift, or think I do.So hopefully if you can provide me enough hints (ie framework or SDK or classes to use etc etc) I can use your suggestions to do further research on the subject.
If you need more details or clarifications, please let me know. Thanks!
You must use web services (server) to achieve this stuff.
Design api for login like if admin user login then you return something like this is admin and shows admin screens in your app like upload dishes etc.
If normal user will login then your api (web service) will return you that this is a normal user then show stuff regarding it in your app.
You required web services for uploading and retrieving recipes.
You can easily manage notification if admin upload new recipe to server.
So, it's basically depends on your server and mobile both side of proper management. Your database will take place server side. that's it.
noob to iOS and Game Dev
I am writing a simple game which has incremental levels (flow chart below). Only thing that I want to do it save information like "Last level passed" on to the cloud.
I would like it so that whether the user signs in to my app from iOS, Android, Web (I'm starting off with iOS app only) - always goes back to the right level.
My fundamental architecture question - should I saving this information in somewhere on Facebook API/SDK or in my own Cloud Backend? (I'm using Parse as my backend)
I would save it into Parse so that you are not tied to Facebook for your users. I know many people do not want to connect their Facebook accounts to apps, etc. so this way you can have one solution for everyone.
Also, by using your own backend you can use Facebook a way for users to log in and then later allow them to log in via twitter, etc. and your game would still work as it should regardless of how the user chose to create an account.
We're trying to implement deferred deep linking in one of our iOS applications to encourage users to invite their friends to use the app, and reward users based on how many installs occur from their referral link. Basically similar to TapStream's product.
Consider this example:
So, UserA shares their link, “ourappURL.com/refer?id=userA”, on any
network they want. UserB clicks that link, which will take them to
Safari and then bounce them to the App Store page where UserB
downloads the app.
When UserB opens the app, the app checks which referral ID they came
in on (if any). In this example, the referral ID would be “userA” as
that’s the ID that was in the referral link. The app then sends this to
our servers and we award UserA with a referral credit.
I'm trying to break this issue down into its core parts. I believe the first part is getting the web page for the user's referral link to save the referral ID to the device somewhere that the app can access it. But I'm not sure this is possible because of the sandboxed nature of iOS.
I know this is fundamentally possible because many ad providers offer the ability to track installations from an ad campaign (see Mobile App Tracking for example).
We have also attempted to do this ourselves and I will try to break down the different steps here.
Going back to your example, you are correct about "remembering" the device identification, and all relevant data "id=userA". You are also correct about "sandboxed nature of iOS" which I presume it means a web page is not allowed to store information outside of the browser app (Safari) and apps (your app) are not able to access information stored by other apps (Safari).
Our solution to this is to store this device to data key-value pair in an environment that is both accessible by the browser as well as by your app, i.e. your backend server.
The next challenge, which remains to be the biggest challenge, is how to uniquely identify this device from the information collectable from the browser? Javascripts in browsers, unlike native apps, don't have access to IDFAs which could be used to uniquely identify a iOS device. To overcome this, one can imagine to use a combination of common information that is available both to the browser app as well to your native app, i.e. OS type, public IP, screen size, etc. etc. Please note, a composite key from these data fields does not guarantee uniqueness (imagine two iPhone 6 visiting this web page via the same router). Therefore, your backend server (assuming you are using it to store this key-value pair), will want to have a strategy on how to handle collisions on keys i.e. the second key deletes the first key, or you allow collision to exist by having a queue of values for a single key. This really depends on how you actual plan to use this technology.
The last step is to form this composite key on your app using the exact same fields you used earlier in the browser to perform a "lookup" on your backend server to retrieve the value previously stored.
Here is a summary of the steps:
User 1 invites User 2 by sending the following link to 2: example.com?inviter=1
User 2 visit Web Page P
P constructs and sends the following key-value pair to your server S iOS|55.55.55.55|750×1334 -> inviter_id=1
User 2 goes to the app store and downloads your App A
User 2 first launches A, A contacts S with the same key (assuming the IP hasn't changed).
S finds the value inviter_id=1 by using this key passed in and, let's say, reward User 1 five points for inviting 2.
Hope this help!
Edit 04/24:
Since Derrick mentioned it in the comments, I figure I would take this chance to finish our story here.
Going back to the beginning of my answer where I mentioned we've attempted to do this ourselves. We had a working prototype based on our current system architecture (which is not in anyway optimized, or meant to be optimized, for storing and analyzing deep link data like this), we ultimately decided not to allocate any additional engineering resource into this project.
Due to the heuristic nature of this matching process, we found this project needing debugging, tuning and optimizing constantly for a diminishing ROI. More importantly, we have found other companies which are more specialized and do a much better job than ourselves.
It has been probably 6 months since we stopped using our internal system and we haven't regretted making such decision.
During this processes, we've worked with a number of vendors, Appsflyer, Adjust, TapStream and we have ultimately ended up with Branch Metrics https://branch.io.
Whether you should DIY or work with another company again depends on your specific objective. We finally decided to stay with Branch, not only because the other vendors charged anywhere from $500 to thousands of dollars per month while Branch is completely free, but also the level of the support they have provided is simply unparalleled.
We've successfully used the clipboard (NSPasteboard) to achieve this: the web page that processes the redirect to the app store does a paste to the mobile device's clipboard before letting the user download the app. Once the app is installed, it uses NSPasteboard on first launch to check for an appropriately coded string. This string can contain the text of interest or, more securely, a token used to fetch interesting data from the backend. In Objective C:
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
NSString *pasteboardString = pasteboard.string;
The clipboard can be cleared once the app is done with it, to avoid repeating the same action.
There is a good solution here: http://blogs.innovationm.com/deferred-deep-linking-in-ios-with-universal-link/
Basic workflow:
User selects domain link on web.
Link sets referral ID to cookie.
User redirected to app store.
On app launch, load referral page in SFSafariViewController.
Referral page checks for cookie and if it exists calls a deeplink into the app with the referral ID.
My answer from HERE
Apple no longer supports Deep Links. It is now called Universal Links and works a bit differently.
Source
Now that Apple no longer supports URI schemes for deep linking, developers must implement Universal Links in order to deep link properly on iOS. If you are already using URI schemes, check out our blog on transitioning to Universal Links.
From: HERE
And HERE is another article on Universal Links and what they are.
I know this is a very basic question, but something I'm never quite sure of, is how do you get images from say your email, or from your desktop (say a Mac) into your iOS app?
Let's say I develop an app and I want people to be able to put their company's logo into it, how would they do that? I presume they don't have their company logo in their phone, so how would they get it from another source into the app? If they linked to it on the web, wouldn't that just open a UIWebView to show it? i.e it wouldn't load the actual .png from the web direct to be used by the app or would it?
So, to avoid long comments, I'm putting my answer here, although this is a very general question.
The common thing with all the apps that want an image input, is that they require the user either take a photo with their phone camera, or grant access to the photo library, so that the user can select an image and upload it to the app. If you have used any of the photo-involved apps these days, you should be familiar with this. Example is Instagram, Facebook, Flickr, etc.
However if you really really want to let the user download it off the internet through your app, then you should embed a web browser in your app, allowing the user type in a URL and save the file in that URL to the documents/downloads folder in your app, and then allow them access those folders to browse and upload stuff. A good example of this kind of app, is "NuageApp" which is actually a client for the Cloud App. It's really handy to deal with file sharing the way NuageApp (funky name, huh?!) does, however it's far more complicated to implement that, than the access to the photo library.