IMHO the problem is because some apps on the devices arent built correctly using this method described in here (on apple iOS developer library guide guide)
Look especially what i've put in BOLD
PS: I all started my investigation starting from my older post in here Link to this post
- canOpenURL:
Returns a Boolean value indicating whether or not the URL’s scheme can be handled by some app installed on the device.
SWIFT
func canOpenURL(_ url
: NSURL) -> Bool
OBJECTIVE-C
- (BOOL)canOpenURL:(NSURL *)url
url
|
A URL (Universal Resource Locator). At runtime, the system tests the URL’s scheme to determine if there is an installed app that is registered to handle the scheme. More than one app can be registered to handle a scheme. The URL you pass to this method can have a common scheme or a custom scheme. |
NO
if there is no app installed on the device that is registered to handle the URL’s scheme, or if you have not declared the URL’s scheme in your
Info.plist
file; otherwise,
YES
.
Read the Discussion section for more information on conditions that affect the return value.
If this method returns
YES
for a given URL, iOS guarantees that that if the
openURL:
method is subsequently called using the same URL, an app registered to handle the URL’s scheme will launch to handle it. This method’s return value does not indicate whether or not the full URL is valid or if the specified resource exists.
If your app is linked against an earlier version of iOS but is running in iOS 9.0 or later, you can call this method on 50 distinct URL schemes. After hitting this limit, subsequent calls to this method return
NO
. If a user reinstalls or upgrades the app, iOS resets the limit.
Unlike this method, the
openURL:
method is not constrained by the LSApplicationQueriesSchemesrequirement: If an app that handles a scheme is installed on the device, the
openURL:
method works, whether or not you have declared the scheme.
Available in iOS 3.0 and later.
– openURL: