Software Archive
Read-only legacy content

IOS Deep Link

Daniel_F_7
Beginner
681 Views

Dear Sir/ Madam,

We have implemented deep linking, using our code (i.e. no plugins), within our apps using custom URLs, however we noticed that with the recent upgrade of Apple’s IOS version 10 (and more recent 10.02) the deep linking between 2 apps stopped working. Strangely enough when invoking the app via the custom URL from Safari (on IOS versions 9.3 and upwards) the link works (i.e. the app loads), which means that the required invocation permissions on the invoking app are working – i.e. the calling app seems to be the problem.

Please find below the version of INTEL XDK we are using and details about the security whitelisting which is available for both the invoking and consuming application:

INTEL XDK Version: 3522

Whitelisting

  • Network Request (<access>) is set to *
  • Intent (<allow-intent>) is set to *
  • Navigation (<allow-navigation>) is set to *

Thank you.

0 Kudos
8 Replies
PaulF_IntelCorp
Employee
681 Views

I would put this into the category of something in iOS 10 has broken your technique, which is not something that the XDK has any control over. The XDK creates a standard Cordova app, if iOS 10 has broken some aspects of Cordova webviews then either the technique being used has to be changed or Cordova may require some updates to address the issue. Doing a quick scan I'm not finding any similar issues for Cordova or PhoneGap users, which may simply mean that you're the first to run into this issue.

I would recommend starting with the CSP rules in your index.html file. Some Cordova and PhoneGap users were having troubles that required an update to their CSP rules to make things work with iOS 10.

Also, this article implies that using window.location (which is my guess as to what you are doing) will not work with iOS 10 > https://blog.branch.io/ios-10-wwdc-deep-linking-review < if the target app is not installed on the device.

It might be better to use a cordova plugin, such as this one > https://github.com/nordnet/cordova-universal-links-plugin < Unfortunately, that plugin uses hooks scripts and so will not work with our build system. You'd have to build locally to use it.

Or, you might have to add the links to your iOS entitlements plist file (just guessing, based on this article > http://blog.ionic.io/deeplinking-in-ionic-apps/ <

I am not an expert on deep links, so I'm mostly throwing out some ideas for you to investigate.

0 Kudos
mattias_c_
Beginner
681 Views

Hello! @Daniel F. Did u manage to fix your problem? if so how? do u mind sharing how this can be done?

@Paul F. If i would use that plugin, how would i build locally using the intel xdk? I'm just used to pressing the build key.

Thanks! 

0 Kudos
Daniel_F_7
Beginner
681 Views

Hello mattias c.,

Yes. We used the AppAvailability cordova plugin (https://github.com/ohh2ahh/AppAvailability) to check whether the application is installed on the device and open it directly from this plugin if installed.

To achieve this, we had to fork the IOS source code for the plugin as follows:

Changed canOpenURL to openURL. So the plugin returns false if the application is not installed and returns true + opens the app if installed.

Hope this helps.

0 Kudos
PaulF_IntelCorp
Employee
681 Views

mattias c. wrote:

@Paul F. If i would use that plugin, how would i build locally using the intel xdk? I'm just used to pressing the build key.

Thanks! 

If you want to build locally you have to install Cordova CLI and Android Studio (to build for Android), the XDK does not provide a local build option. Here are some basic instructions you can follow to convert your project into a Cordova CLI project > https://software.intel.com/en-us/forums/intel-xdk/topic/685326#comment-1885369 < and I have also created a prelim script to help you convert the XDK config files into PhoneGap Build and Cordova CLI config.xml files, which you can find here > https://github.com/xmnboy/xdk-to-cli < (you will also have to install Node.js on your system).

0 Kudos
mattias_c_
Beginner
681 Views

Okay, thanks alot Paul! Before attempting that i figured that I could try this plugin maybe, https://github.com/BranchMetrics/cordova-ionic-phonegap-branch-deep-linking 

used from

https://developer.branch.io/

Or can you tell just like with the other plugin that it wont work somehow with the xdk? Thanks once again! 

0 Kudos
PaulF_IntelCorp
Employee
681 Views

I don't see any gradle scripts in the repo for that plugin, but it does include hooks scripts. So it will likely build but not work in your app, because the build system will ignore the hooks scripts. You also cannot build on PhoneGap Build with hooks scripts, those require building locally with CLI.

0 Kudos
mattias_c_
Beginner
681 Views

Thanks alot @Daniel and @Paul I appreciate it!

Edit:

Are we able to edit the info.plist?(https://software.intel.com/en-us/forums/intel-xdk/topic/590741) is there some recommended way of doing it? or should we do it through another plugin for example. Like the Geolocation plugin has this for example inside the plugin.xml:

        <config-file target="*-Info.plist" parent="NSLocationWhenInUseUsageDescription">
            <string></string>
        </config-file>

@Daniel so I only need to go inside AppAvailability.m and change this:

if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:scheme]])

to

if ([[UIApplication sharedApplication] openURL:[NSURL URLWithString:scheme]])

or?

Thank you

0 Kudos
PaulF_IntelCorp
Employee
681 Views

mattias -- you'd have to do it with a custom plugin or by cloning and modifying the plugin.xml file of the plugin of interest (if that's sufficient, I'm not sure what mods need to be made, so I can't say for sure). We have no direct way of making modifications to a plist file or Android manifest files with the additions file and our build system.

0 Kudos
Reply