How to use deep-linking same as facebook in iOS? - ios

I want to use deep-linking , for example consider my post url is http://myappsite/api/video/post_id , how can I implement deep-linking using this link. as facebook is doing with this url https://www.facebook.com/page_name/videos/post-id

You need to implement universal links on website and app.
You can also use Branch to help you integrating universal links / deep linking.

You need link you mobile app and website by universal links and than you need parse url inside you ios code and open correct screen

You have to implement Universal linking for acheaving this type of functionality. This would give you a good start .
https://medium.com/#abhimuralidharan/universal-links-in-ios-79c4ee038272
After that, when you click on the link, your application will open and following delegate function called in AppDelegate.
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: #escaping ([Any]?) -> Void) -> Bool {
print("Continue User Activity called: ")
if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
let url = userActivity.webpageURL!
print(url.absoluteString)
//handle url and open whatever page you want to open.
}
return true
}
The url.absolutelyString return the url string on which you tapped. Chop out your video_id and open the appropriate ViewController.

Related

Universal linking with website by using swift

I using Universal-linking in my application, For that, I make the following apple-app-site-association file, like with the following code.
I place this file into server please find here:- http://dev.2ULaundry.com/apple-app-site-association
I add Domain URL into under associated domain into Capabilities of project file also.
But my Universal linking is not working anyone please help to me.
"applinks": {
"apps": [],
"details": [
{
"appID": "D929J2.com.apple.wwdc",
"paths": [ "/scheduled-pickups/","/new-schedule/", "dashboard-1", "/refer-a-friend/", "/price-list/", "/give-a-gift/", "/locations", "2u-rewards/", "payments/"]
}
]
}
}
And add the following code into appdelegate file also for hadling.
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: #escaping ([Any]?) -> Void) -> Bool
{
if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
let url = userActivity.webpageURL!
let userurl = url.absoluteString
if userurl.contains("/scheduled-pickups/")
{
let innerPage = UIStoryboard.loadPickupController()
innerPage.selectedfrom = SelectedFromVc.Deeplinking.rawValue
let nav = UINavigationController.init(rootViewController: innerPage)
nav.isNavigationBarHidden = true
self.window?.rootViewController = nav
}
}
You should check is your domain valid for using universal links. You could do it here: https://branch.io/resources/aasa-validator/.
I've checked your domain http://dev.2ulaundry.com there and there are some issues with your domain. Fix them and it should be fine.
Before the implementation, you have to verify your website domain with this AASA validator https://branch.io/resources/aasa-validator/. It has few warnings so please run the validator and fix the issue.
As per you shared, the domain starts with "http" but
Universal link only serves "https"
and also it would be good if you are placing the AASA file in the below path
https://dev.2ulaundry.com/.well-known/apple-app-site-association
Since I spent lot of times on Universal link & App links, my
recommendation is to use Firebase dynamic link for free or
Branch.io before wasting your time.Universal link will create lot of issues
like you can't check the app availability(app installed or not) and
you can't passing the parameter via Apple/Play store.

How to generate links for sharing in iOS?

I want share url of product, product name to some user using either what's app or facebook etc.when user clicks on that product, same product page in app should be opened if app is installed. if app is not installed it should navigate to app store.Now how to generate that sharable link so that same page in app should be opened when user clicks?
To solve this issue you need to implement Universal link.
Add applink: in Target-> Capablities ->Associated Domain -> Domains -> Add server url
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: #escaping ([Any]?) -> Void) -> Bool {
print("Continue User Activity called: ")
if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
let url = userActivity.webpageURL!
print(url.absoluteString)
//handle url and open whatever page you want to open.
}
return true
}
See the following post for more information
https://medium.com/#abhimuralidharan/universal-links-in-ios-79c4ee038272

Closes SFSafariViewController on a certain url

I am trying to close SFSafariViewController when I reach a certain page.
But I am unable to do it until the "Done" button is pressed explicitly
by the user.
What I want is to get the URL as soon as it reached a certain page and then dismiss the view controller.
Then I can pick the rest using this
func safariViewControllerDidFinish(_ controller: SFSafariViewController){
// do work here
}
Note: This question has been asked before but I was unable to find any
satisfactory answers
If you register a URI scheme for your app, you could have have a link on a page which takes you back to your app. At that point you'll be in
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
of your AppDelegate and you can do whatever you wish.
“Because since Safari View Controller has access to a user’s
credentials, synced across all of their devices with iCloud Keychain,
logging in is going to be a breeze.[…] It takes two steps. The first
is where you would’ve used your own in-app browser, just present an
instance of SFSafariViewController.
And once the user is finished logging in and the third-party web
service redirects back to your app with the custom URL scheme that you
fed it, you can accept that in your AppDelegate‘s handleOpenURL
method.
From there you can inspect the response and dismiss the instance of
SFSafariViewController because you know that the authentication is
done.
That’s it. Two steps.”
Source: http://asciiwwdc.com/2015/sessions/504#t=1558.026
Please note the handleOpenURL method is deprecated in favor of application:openURL:options:.
Maybe It's late But I think It will help anyone search for the same question
Listening to the SFSafariViewControllerDelegate delegate you can use this method inside
func safariViewController(_ controller: SFSafariViewController, initialLoadDidRedirectTo URL: URL) {}
inside it you can make if condition on your certain page you need to take action for ... as example if I want to close it when reaching certain page I'will fo this
func safariViewController(_ controller: SFSafariViewController, initialLoadDidRedirectTo URL: URL) {
if URL.absoluteString == "WHATEVER YOUR LINK IS"{
controller.dismiss(animated: true, completion: nil)
}
}
You cannot do that with a SFSafariViewController. Use a WKWebView instead and implement the WKNavigationDelegate method like optional func webView(_ webView: WKWebView,
didFinish navigation: WKNavigation!) and then read the current URL. Define your action based on that.
You can use this to close the view controller that houses your web view. You will unfortunately have to build your own navigation buttons (the ones the SFSafariViewController has), if you want to allow the user access to those. You don't have to provide them.

Firebase iOS / Swift and Deep Links

We have just integrated firebase, and all of a sudden our deep links are no longer working. We're using AppAuth for authentication, so we're reliant on deep links to direct us to the right place. I'm getting the following error:
<Debug> [Firebase/Analytics][I-ACS023001] Deep Link does not contain valid required params. URL params: {...}
Initialization of firebase as follows:
let bundleId = Bundle.main.bundleIdentifier
let filePath = Bundle.main.path(forResource: "GoogleService-Info-" + bundleId!, ofType: "plist")!
let options = FIROptions(contentsOfFile: filePath)
FIRApp.configure(with: options!)
And here's the deep linking functions:
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
return application(app, open: url, sourceApplication: nil, annotation: [:])
}
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
if url.host == AppHost.deeplink {
...
}
If i remove the call to FIRApp.configure, everything in the app works fine. My AppAuth redirects flow into the function above without any issue. However, with the call to configure(), it never gets into either one of the functions. As a result, i can't do a token exchange and complete authentication.
I suspected the AppDelegate proxy might be the issue, so i tried disabling it in the plist file. I've validated that the plist file passed to FIRApp.configure has the appropriate keys:
<key>FirebaseAppDelegateProxyEnabled</key>
<false/>
But no matter what i do, it's still activating the proxy:
[Firebase/Analytics][I-ACS003007] Successfully created Firebase Analytics App Delegate Proxy automatically. To disable the proxy, set the flag FirebaseAppDelegateProxyEnabled to NO in the Info.plist
I'm using only FirebaseCrash and FirebaseCore (and FirebaseAnalytics indirectly through crash)
Instead of adding the FirebaseAppDelegateProxyEnabled key to the GoogleServices-Info.plist, add it to your App's info.plist. The Google Services plist should not be modified once it's generated.
As for disabling the proxy, it's fine to do this long term. The proxy is a convenience thing (it's just swizzling some methods), and you can reimplement it manually. There's some examples here of how to handle the lack of the proxy (non-swizzling case).

How to launch our app when we click a link in gmail

I am sending a link after signing up to the account from which user has signed up.
Now I want that when user click on that link from the corresponding account then he/she will move to app.
is there any way to launch our app from link clicked on gmail app?
Please help...
Thanks
You need to do perform Universal Linking.For universal linking you need to first create a “apple-app-site-association” file, which look like this :->
{
"applinks": {
"apps": [],
"details": {
"appID": "9JA89QQLNQ.com.apple.wwdc": {
"paths": [
"/wwdc/news/",
"/videos/wwdc/2015/*"
]
}
}
}
}
The applinks tag determines which apps are associated with the website. Leave the apps value as an empty array. Inside the details tag is an array of dictionaries for linking appIDs and URL paths.
The appID consists of your team ID combined with the app’s bundle ID.
After creating file you need to upload it on your domain like www.yourHost/apple-app-site-association.
now you need to go capabilities -> Associated Domains add here a link which you want to make universal i.e, which link you want to tappable to open your app.
Then you need to add this method in your app delegate class.
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: #escaping ([Any]?) -> Void) -> Bool {
//code here to related universal links
/* The activity type used when continuing from a web browsing session to either a web browser or a native app. Only activities of this type can be continued from a web browser to a native app.
*/
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let url = userActivity.webpageURL,
let components = URLComponents(url: url, resolvingAgainstBaseURL: true) else {
return false
}
//do something
return true
}
Here is the use of URL scheme, you can add it to your application in the info plist file.
And use the below delegate to catch the response
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool
You just asked for the details so this tutorial will help you

Resources