Trigger.io Urlhandler - Deep Linking with Facebook - facebook-android-sdk

Deep linking for Android apps on Facebook allows apps to be opened directly upon clicking a open graph story or other link on FB.
The required settings for this are:
Package Name
Class Name ("The Class Name of the activity you want Facebook to launch")
The package name is user-configurable in the Trigger web interface and I have that correct, however I have no idea what the Class Name is, because handler classes are not directly written.
I've tried "urlhandler", "ForgeActivity", and my custom urlhandler scheme ('fb[APP_ID]' as per FB documentation).
In all cases Facebook launches the Play store instead of the app which is already installed and authorised. This is the expected fallback behaviour if the Package Name is correct but class name is not.
What is the class name I can use for Trigger to handle launching from Facebook?

The class name for the main activity in Trigger is io.trigger.forge.android.core.ForgeActivity.
I've not tested it but I believe with that setting deep linking will open your app, but it doesn't use the urlhandler so unfortunately there will be no way for you to receive and handle the deep link url.

Related

How to know app was installed through firebase dynamic link in didFinishLaunchingWithOptions?

I am implementing firebase dynamic links in my iOS app and I can already parse the link, redirect to AppStore etc. Now I want to distinguish the first run of the app, when user installs it from the dynamic link - I want to skip the intro and show him the content that is expected to be shown.
Is there a way to know how the app is opened before being in didFinishLaunchingWithOptions?
The method application:openURL:options: will be called when Firebase Dynamic Links iOS SDK finished retrieving the pending (deferred) dynamic link.
If pending dynamic link is found, the object [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url] will have non-nil property url. The url will be equal to your deep link, that user tapped while your App was not installed. If link is not found, this property will be nil.
I suggest you to show "loading screen" in your didFinishLaunchingWithOptions. When Firebase Dynamic Links SDK will pass you result, you can proceed with custom onboarding if pending dynamic link is found. Or default onboarding if pending dynamic link is not found. Keep in mind, if network is slow, this may take some time. You may want to have timeout set to X seconds, to not hold your user too long at "loading screen".
Documentation about receiving Firebase Dynamic Links on iOS https://firebase.google.com/docs/dynamic-links/ios/receive

Can I create a Whitelist for Safari using OpenUrl in Xamarin.Forms?

I am working on a project using Xamarin.Forms as a container app. This app includes several webviews that link to restricted web content. One of these links our Sharepoint site. The Sharepoint site has a link that allows our users to go to a 3rd party site(Cornerstone) to view training videos. When using the stock UIWebView, WKWebView, or SFSafariViewController the popup that displays the video is not shown. The only way that I can get this video to play in my app is to use OpenURL to open the Sharepoint site in Safari. The problem is that this is an Enterprise solution where we don't want to allow the employees free reign with the browser.
Is there a way to create a whitelist or to have some control over the searchbar or read the url that they are linking to and block it or redirect the user?
Unfortunately as it's farming out the URL Navigation external to your application there's not a lot you can do from within your app to restrict what they do after the fact, 'openURL' only returns a Boolean value as to it's success, and the only parameters that you can send to it are:
application - Reference to this application
(UIApplication.SharedApplication).
url - The NSUrl specified by the
calling application.
sourceApplication - The bundle ID of the calling
application.
annotation -Optional property-list data passed by the
calling application.
You can only access these if you override the 'openURL' method within your 'AppDelegate.cs' class, there is a set of options you can pass through as an override but again none of those allow you to restrict what the user does after the browser has opened.
If the devices are managed using something like 'meraki' or some other software to control the use of managed devices, then you would likely set up a 'group policy' styled set of restrictions however that's not really a Xamarin issue, and should be discussed with the network administrators.
That being said, I don't see any reason why you can't use the WebView1, that way you can handle it all within your application. Or alternative utilize custom renderers and pass in the direct video urls and commit to opening up the devices media player for streaming the content2.
1 Playing videos in WebView
2 Using the media manager plugin.

branch.io deeplinking not working

So I've setup branch.io and universal links on my app and website but the deep link doesn't seem to be working
Using the dynamic link
https://foo.link?%24deeplink_path=event%2F99
I get redirected to
https://foo.com/?$deeplink_path=event%2F99
I was expecting it to go here instead
https://foo.com/event/99
Additionally - when I trigger the link in my app on device or simulator it doesn't deep link in or trigger the branch event functions in react native - but does open the app.
I've added the methods to AppDelegate and went through all the steps to deep link - did I miss something?
Alex from Branch here:
You're really close — this is just a minor misconception in how the various Branch configuration parameters work.
First of all, know that a Branch link can contain various 'control parameters' that define system behavior, and an unlimited number of custom key:value pairs.
On Android and iOS < 9 (both of which use URI schemes for deep linking), the $deeplink_path param is a control param: Branch automatically passes any value in this parameter into the standard URI path methods when the app opens. On iOS > 9 (which uses Universal Links), $deeplink_path is treated as just a 'normal' key:value pair, but you can build some custom code to make it behave the same way as Android and iOS < 9.
Website redirects work a little bit differently. What you actually want here is the $fallback_url control parameter (or one of its platform-specific varients). This defines where non-app users will be redirected. In this case, https://foo.link?%24fallback_url=https%3A%2F%2Ffoo.com%2Fevent%2F99 should do what you want.
You can find documentation on all these configuration parameters here

How do I notify users of new content available in tvOS apps from the home screen?

Push notifications have been left out of tvOS (understandably so) but the docs seem to contradict themselves in alerting users to the fact that there is something new available in your tvOS app.
Here it seems to say that you can add an app badge: https://developer.apple.com/library/prerelease/tvos/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/WhatAreRemoteNotif.html
Here it says they've been removed from UIKit: https://developer.apple.com/library/prerelease/tvos/releasenotes/General/tvOS90APIDiffs/Objective-C/UIKit.html
Removed UIApplication.applicationIconBadgeNumber
Assuming the badge approach is not supported in this release, does anyone know the best practice for alerting a user that there is new content in your app without the user taking an explicit action? ie focusing on the app and showing them something in TopShelf?
I encountered the same problem and dived into this. Probably your best way is to update the topshelf with latest items, which is my way to solve this for now. You can use network calls to update the topshelf with content from your backend.
This depends on the type of application. E.g. showing the latest top movies for a movies app.
You can trigger an update of the topshelf after your network call completed using the following code:
NSNotificationCenter.defaultCenter().postNotificationName(TVTopShelfItemsDidChangeNotification, object: nil)
Make sure to implement the TVTopShelfProvider which should be clear using the following documentation:
This protocol is adopted by the principal class of an app’s TV Services extension. Apps that implement this extension can provide dynamic content to the Top Shelf element rather than having the system use the static image submitted with the app. The topShelfStyle property specifies the interface style you want, and the topShelfItems property specifies the content items to display. Whenever you change the content provided by the extension, post a TVTopShelfItemsDidChangeNotification notification to prompt the system to reload your content.
Icon badges are removed for app icons, push notifications as well (except for silent push notifications).

Swap the application in Objective-C?

I'm developing iPad application I need to integrate third party project(Source code) with my code like i have a button in my code, when i click on the button it landed to third party application page then navigate around and vice verrsa. what is the best way to swap the app?
Regards,
Sri
Use the url schema.
See add custom URL Schema using http://
Every Application can have customer url schemas. Like ...
yourapp://someting?withparams=1.
To get they running you have to change your Info.plist to inform the iOS that your app is handling that url schema. See the SO post above.
When another App calls that URL your app gets opened and you get a hook on your app delegate.
check http://developer.apple.com/library/ios/#featuredarticles/iPhoneURLScheme_Reference/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007899
and:
http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIApplicationDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intf/UIApplicationDelegate
Also look here:
http://wiki.akosma.com/IPhone_URL_Schemes