Search Unity

[RELEASED] Universal Deep Linking - Seamless Deep Link and Web Link Association

Discussion in 'Assets and Asset Store' started by ImaginationOverflowPT, Sep 4, 2018.

  1. ImaginationOverflowPT

    ImaginationOverflowPT

    Joined:
    Sep 15, 2017
    Posts:
    186
    Universal Deeplinking plugin enables your Unity projects to be opened or activated using deep links and/or web links, enabling your projects another way to interact with your users.
    The plugin automatically configures deep linking and domain association on the target platform on build, making its usage simple and quick, the integration is as simple as registering a callback to an event.

    Features:
    - Plug and play
    - Simple UI to configure your deep links and web links
    - Built-in editor test tool
    - Global or per platform configurations
    - Steam Integration
    - Automatic query string parsing
    - Simple API

    Deep Linking Supported Platforms:
    - Android
    - iOS
    - tvOS
    - Windows Store
    - Standalone (Linux, Windows, MacOs)
    - Steam (Linux, Windows, MacOs)

    Domain/Web Association Supported Platforms:
    - Android
    - iOS
    - tvOS
    - Windows Store
     
    Last edited: Mar 2, 2023
  2. ImaginationOverflowPT

    ImaginationOverflowPT

    Joined:
    Sep 15, 2017
    Posts:
    186
    Just a bump
    We've made an update fixing the iOS build issue on Unity 2018, it's still in certification if anyone needs the latest package just contact me and I will set you up until it isn't online on the store.
     
    rob_ice likes this.
  3. rob_ice

    rob_ice

    Joined:
    Nov 11, 2016
    Posts:
    112
    ** AS A QUICK UPDATE** - I have discovered that building to simulator SDK on an IOS build means that the Universaldeeplinking framework isn't in the xcode project .. for whatever reason - and this seems to be the cause which is also preventing us from testing our app - when will there be a fix?

    @Sorcha08
    using the latest package, Unity 2018.2.10f1 and xcode 10 from the macos app store building to the IOS Iphone simulator, the build returns this error when we try to test with a simulator sdk build


    dyld: Symbol not found: _DeepLink_RegisterCallback

    Referenced from: /Users/rob.farthing/Library/Developer/CoreSimulator/Devices/14DAE02B-0F7B-40AE-A2F9-1D04D9C1ECB4/data/Containers/Bundle/Application/6BDE0CF4-2FCD-4821-8356-C70617FD5811/ProductName.app/ProductName

    Expected in: flat namespace


    Further log info here

    #pragma clang diagnostic push

    #pragma clang diagnostic ignored "-Winvalid-offsetof"

    #pragma clang diagnostic ignored "-Wunused-variable"

    #endif

    // ImaginationOverflow.UniversalDeepLinking.ILinkProvider ImaginationOverflow.UniversalDeepLinking.LinkProviderFactory::GetProvider(System.Boolean)

    extern "C" IL2CPP_METHOD_ATTR RuntimeObject* LinkProviderFactory_GetProvider_m3019331590 (LinkProviderFactory_t317673194 * __this, bool ___isSteamBuild0, const RuntimeMethod* method)

    {

    static bool s_Il2CppMethodInitialized;

    if (!s_Il2CppMethodInitialized)

    {

    il2cpp_codegen_initialize_method (LinkProviderFactory_GetProvider_m3019331590_MetadataUsageId);

    s_Il2CppMethodInitialized = true;

    }

    {

    IosLinkProvider_t3734289949 * L_0 = (IosLinkProvider_t3734289949 *)il2cpp_codegen_object_new(IosLinkProvider_t3734289949_il2cpp_TypeInfo_var);

    IosLinkProvider__ctor_m581572898(L_0, /*hidden argument*/NULL);

    return L_0;

    }

    }
     
    Last edited: Sep 28, 2018
    ROBYER1 likes this.
  4. ImaginationOverflowPT

    ImaginationOverflowPT

    Joined:
    Sep 15, 2017
    Posts:
    186
    Hi
    Thanks for letting us know, we just tested the plugin for the simulator profile on Unity 5.5, 2017 and 2018 on both Windows and Mac and unfortunately, we weren't able to replicate the issue.

    On your xcode project the lib should be under Libraries/Plugins/ImaginationOverflow/UniversalDeepLinking/libs/iOS/libUniversalDeepLink.a

    Can you confirm that the library isn't there?
    Did any error popup during the build?
    Did you try to build just an empty project with the plugin?

    Sorry for all the questions, we are trying to figure out what could be wrong.
    We did double check that the library should be always included no matter your target sdk or build configuration, so the only thing we can think is that something went wrong on the build process.

    Let us know how it went either here, via email or on our Discord Server

    And sorry for the late reply

    EDIT: The issue as solved with the user via PM
     
    Last edited: Oct 12, 2018
  5. Taras-Hulka

    Taras-Hulka

    Joined:
    Oct 24, 2014
    Posts:
    5
    Hello,
    I try to use your plugin and have an issue. I use the Domain Association. The application opens well and that means I set setting right.
    
But DeepLinkManager.Instance.LinkActivated += Instance_LinkActivated doesn’t works.

    When I try to debug in Unity Editor I get link. But on device nothing happens.
     
  6. ImaginationOverflowPT

    ImaginationOverflowPT

    Joined:
    Sep 15, 2017
    Posts:
    186
    Hi!
    On which platform are you experiencing this issue?
    What plugin version are you using?
     
  7. Taras-Hulka

    Taras-Hulka

    Joined:
    Oct 24, 2014
    Posts:
    5
    IOS 12. Plugin is last version from AssetStore - 1.1.3
     
  8. ImaginationOverflowPT

    ImaginationOverflowPT

    Joined:
    Sep 15, 2017
    Posts:
    186
    Do you have any logs that you can share with us?
    Did you try to test it out using only our Demo scene?
     
  9. Taras-Hulka

    Taras-Hulka

    Joined:
    Oct 24, 2014
    Posts:
    5
    Thank you for your answer.

    Very strange. I created new empty project, added the plugin and set same settings. It’s works! But in existing project in a new scene - doesn’t work. I think the problem is in a project settings or other plugins. I also use ARkit

    I have attached the log when I started the application via Xcode. But how I can see the log if I start application via external link?

    update.
    log2.txt - The log when I started via external link.
     

    Attached Files:

    • log.txt
      File size:
      4.6 KB
      Views:
      867
    • log2.txt
      File size:
      23 KB
      Views:
      982
    Last edited: Nov 14, 2018
  10. Taras-Hulka

    Taras-Hulka

    Joined:
    Oct 24, 2014
    Posts:
    5
    Thank you for your support.
    The issue is sold. The problem was in an old plugin for deep link. After deleted it, your plugin works perfect.
     
  11. ImaginationOverflowPT

    ImaginationOverflowPT

    Joined:
    Sep 15, 2017
    Posts:
    186
    Oh, awesome! Glad to know!
    Any other issues or suggestions feel free to contact us via here, discord or email ;)
     
  12. MeessenPhilips

    MeessenPhilips

    Joined:
    Oct 3, 2016
    Posts:
    4
    Do you know if this works for sideloaded GearVR or store apps?
     
  13. ImaginationOverflowPT

    ImaginationOverflowPT

    Joined:
    Sep 15, 2017
    Posts:
    186
    Hi,
    It depends what is your target platform?
    If it's standalone the plugin only supports Deep Linking, If it's Gear Store we don't know if it will work since we don't have the hardware to test it. But since it seems to use the same SDK as Android it might work.
     
  14. JedBeryll

    JedBeryll

    Joined:
    Jan 3, 2015
    Posts:
    2
    Hi,
    I know webgl is not listed as supported, but is it possible to make it work with domain association?
     
  15. ImaginationOverflowPT

    ImaginationOverflowPT

    Joined:
    Sep 15, 2017
    Posts:
    186
    Hi,
    Not directly using the plugin. Since domain association associates an app to a domain, on WebGL your game is open on the website.

    To avoid the build error when building for WebGL, go to Assets\Plugins\ImaginationOverflow\UniversalDeepLinking\libs\Dummy and mark the library ImaginationOverflow.UniversalDeepLinking.Platform to be built for WebGL, this will remove the error.

    To get the URL to a webgl build you can use the Application.absoluteURL
     
    Lavi424 and rob_ice like this.
  16. ImaginationOverflowPT

    ImaginationOverflowPT

    Joined:
    Sep 15, 2017
    Posts:
    186
    We just released the pro version of our Unity plugin. The pro package contains the source code to support all the deep linking and domain association functionalities.
     
  17. Airship

    Airship

    Joined:
    Sep 10, 2011
    Posts:
    260
    Will this work on Android alongside Firebase's Cloud Messaging plugin which has a custom Activity activity com.google.firebase.MessagingUnityPlayerActivity.
     
  18. ImaginationOverflowPT

    ImaginationOverflowPT

    Joined:
    Sep 15, 2017
    Posts:
    186
    Hi, yes, we do not use a custom activity ourselves we just connect to the launcher activity
     
  19. Airship

    Airship

    Joined:
    Sep 10, 2011
    Posts:
    260
    Awesome, I will have to check this out then.
     
    ImaginationOverflowPT likes this.
  20. ImaginationOverflowPT

    ImaginationOverflowPT

    Joined:
    Sep 15, 2017
    Posts:
    186
    Let us know if you have any other concerns ;)
     
  21. reigota

    reigota

    Joined:
    Mar 23, 2010
    Posts:
    86
    Are you able to handle deferred deep link?
     
  22. AuxiliumHorizons

    AuxiliumHorizons

    Joined:
    Apr 26, 2018
    Posts:
    1
    It is not clear if your plugin will detect if an App is Installed, if not installed then jump to the relevant store page (iOS, GooglePlay, Windows Store, OSx store, Amazon Store ) to allow the install. Then initiate the deep link.
     
  23. ImaginationOverflowPT

    ImaginationOverflowPT

    Joined:
    Sep 15, 2017
    Posts:
    186
    Hi, the plugin only handles the activation, if the app isn't installed there isn't anything that we can do!

    The redirect to the store is only possible via deferred deep links or Domain Association, you can read about domain association on our documentation.

    Let us know if you have any other questions
     
  24. JomarINGames

    JomarINGames

    Joined:
    Mar 17, 2019
    Posts:
    2
    Your plugin is awesome. Everything works, aside Google Play redirect. Is this part bugged?
     
  25. ImaginationOverflowPT

    ImaginationOverflowPT

    Joined:
    Sep 15, 2017
    Posts:
    186
    Hi, what do you mean by google play redirect? The plugin doesn't have such feature. If you mean deferral deep linking the plugin doesn't support that (yet at least).
     
  26. Ttravi

    Ttravi

    Joined:
    Jan 22, 2018
    Posts:
    32
    Thanks for the reply!
     
  27. JezPez

    JezPez

    Joined:
    Jan 19, 2014
    Posts:
    1
    I know that Unity Editor registers with the app com.unity3d.kharma which opens the AssetStore. EG:
    <a href='com.unity3d.kharma://123'/>


    Did you guys find a way to open a deep link back to the unity editor itself running a scene?

    It would be awesome to be able to use our deep link logic right in the unity scene within the Unity editor instead of building/running the native app.
     
  28. ImaginationOverflowPT

    ImaginationOverflowPT

    Joined:
    Sep 15, 2017
    Posts:
    186
    Hi, we have a built-in debug tool that enables you to test the logic by mimicking the deep link inside the editor, to use it open it up in Window/ImaginationOverflow/Universal DeepLinking Debug, start your game and click Debug, and the LinkActivated event should trigger ;)

    For more info on how to test, check our documentation
     
  29. Cutedge242

    Cutedge242

    Joined:
    Nov 20, 2012
    Posts:
    9
    Hi, I'm interested in this plugin as I had deeplinking in my HoloLens UWP app previously for the .net scripting backend, but I don't really have the c++ knowledge for hooking up the similar code in the app.cpp like I had in the app.cs. So, just to make sure this meets my needs, does this plugin support il2cpp deep linking for UWP apps?
     
  30. ImaginationOverflowPT

    ImaginationOverflowPT

    Joined:
    Sep 15, 2017
    Posts:
    186
    Hi
    Yes the plugin works for all UWP profiles (XAML/D3D and .Net/il2cpp)
    Let us know if you have further questions.
     
  31. novaVision

    novaVision

    Joined:
    Nov 9, 2014
    Posts:
    518
    Any idea why deeplink preview image is not displayed on recipient device using sharing by message on iOS (iMessage) ?
     
  32. ImaginationOverflowPT

    ImaginationOverflowPT

    Joined:
    Sep 15, 2017
    Posts:
    186
    Hi, as far as we are aware there is no way of configuring the image on a deep link in iOS. With Domain association you can use metatags on your website but since deeplinks are basically pointers to your app (not specific content) there shouldn't be any generic way of adding a preview image to them.

    Let us know if you have any more questions
     
  33. DVFrance

    DVFrance

    Joined:
    Jul 9, 2012
    Posts:
    20
    Hi,

    I have a question about your asset, is it possible to use Custom Deferred Deeplink with it ?
     
    ImaginationOverflowPT likes this.
  34. Andreas_StrangeQuest

    Andreas_StrangeQuest

    Joined:
    Mar 12, 2019
    Posts:
    5
    Have the same question. Simple and clear:
    Is it possible to use deferred deep links with your asset? More specifically: I do understand that you do not host a server as a service to store the user attribution data like Tune:Branch or similar services but do you know if your links will be compatible with such a service?
     
    Last edited: May 13, 2019
    ImaginationOverflowPT likes this.
  35. ImaginationOverflowPT

    ImaginationOverflowPT

    Joined:
    Sep 15, 2017
    Posts:
    186
    Hi
    You can use branch or firebase (or any deferred deep link service) alongside our plugin, but it will still be 2 different systems, so for our plugin, you will handle deep links with our API (1 event listener) and with branch (or similar service) you will need to integrate with their SDK.


    Although with a similar name, Deferred Deep Linking and Deep Linking are very different in their core. Deep Linking uses OS features to register a domain/custom URI and activate an app. Deferred deep linking usually works by tracking the user location (e.g IP, Device type, ETC) and check at app start if the current user opened a certain link in a given time frame.

    Since our goal at the moment is to provide standalone plugins only (not fully fledged subscription-based services) that don't need any extra steps besides what you see in the package we won't be adding deferral deep linking to this plugin anytime soon, at least until iOS has a standalone way of implementing this without any server (which they already had up to iOS 9).

    Hope that this answer all your question, feel free to ask for more details.
     
  36. DVFrance

    DVFrance

    Joined:
    Jul 9, 2012
    Posts:
    20
    Thx for your answers, I'm going to make my part with Firebase today, but stay tuned on your asset for the futur!
     
  37. ImaginationOverflowPT

    ImaginationOverflowPT

    Joined:
    Sep 15, 2017
    Posts:
    186
    Thanks!
    We will be making an update this weekend that will make easier for our plugin to work with other deferred deep linking systems, basically, we will open up our API to allow users to manually trigger the LinkActivated event, that way anyone can easily integrate our plugin with any deferred deep linking solutions out there
     
  38. markachten88

    markachten88

    Joined:
    Apr 24, 2015
    Posts:
    31
    Hi there.

    We have a setup where we use a single code base to create multiple apps in different languages. In this setup we require multiple application ids (com.ourcompany.appone,com.ourcompany.apptwo) and thus mutliple domain associations. Does your plugin support that as well or do we have to tweak things in pre or post build scripts in the unity cloud build service?
    And I read that on Windows, the deep link is only configured the first time the app runs. That is because the app writes the necessary info to the registry. But on rolling out the app, we create an installer using Inno Setup. I assume we can write/create the required registry settings then?

    Thx!
     
    Last edited: May 20, 2019
  39. ImaginationOverflowPT

    ImaginationOverflowPT

    Joined:
    Sep 15, 2017
    Posts:
    186
    Hi!
    Regarding your use case, the plugin should work as expected, if you don't need to change the deep link configuration it should work on any app id without any issues.

    If your installer correctly writes on the registry the activation configuration, the plugin won't have any issues on handling those activations ;)
     
  40. markachten88

    markachten88

    Joined:
    Apr 24, 2015
    Posts:
    31
    Thanks for the swift response.
    What exact registry settings do we need to change? I do have registering the custom uri scheme in place. Anything else required?
    And what IF we do need to change the deep link configuration? How can we do that using code?
     
    Last edited: May 20, 2019
  41. ImaginationOverflowPT

    ImaginationOverflowPT

    Joined:
    Sep 15, 2017
    Posts:
    186
    If you already have this, you don't need anything else (that is exactly what we do inside the plugin)

    You can't (right now at least), the plugin does handle automatic configuration changes but only at build. (meaning that right now you can only change the deep link with an update).
     
  42. markachten88

    markachten88

    Joined:
    Apr 24, 2015
    Posts:
    31
    I noticed the custom scheme doesn't work on chrome on android anymore, so I have to use the applinks method. But what is the best way to use a custom fallback URI? We publish our apps outside the play store and I want to fallback to our custom download page. Thx!
     
  43. ImaginationOverflowPT

    ImaginationOverflowPT

    Joined:
    Sep 15, 2017
    Posts:
    186
    Hi, it does! (Or should at least) How are you testing? Did you tried our test tool - https://universaldeeplinking.imaginationoverflow.com/test ?

    About the custom fallback URI, can elaborate on your use case?
     
  44. markachten88

    markachten88

    Joined:
    Apr 24, 2015
    Posts:
    31
    Before I do, please allow me to compliment you on your support! You guys rock!

    Our use case is as follows:

    We use an enterprise account to deploy our apps. So no PlayStore and no AppStore needed. Our app communicates with external systems to report progress and results. Users should also be able to start the app directly from a browser (which has the username encrypted in the uri). So users get a link to a custom download page. On that page, I use

    window.location = mycustomscheme://token=myencryptedtokenwithusername' to launch the app.

    In that scenario, the app is not launched.The test tool you mentioned DOES launch the app, but that is triggered by a user click. That is something we want to avoid to increase user experience. Is this the problem? The app DOES launch when using FireFox.


    So my thought was to use the AppLinks feature for Android as this is the only platform which is not working yet with the custom schemes. Same scenario. Users should be able to start the app directly from a browser (which has the username encrypted in the uri). So users get a link to a custom download page. On that page I now use

    window.location = 'https://mycustompage.mydomain.com/token=myencryptedtokenwithusername'.
    (registered using your tool)

    What I read is that if the app is not installed, on Android using AppLinks, it brings you to the PlayStore. Something I don't want. Hence the fallback URI. Op opening the URI above, if it fails I redirect to the fallback URI or just open that URI anyway.
     
    Last edited: May 22, 2019
  45. ImaginationOverflowPT

    ImaginationOverflowPT

    Joined:
    Sep 15, 2017
    Posts:
    186
    As far as I tested this doesn't happen, at least automatically (you can try it yourself using https://sudokuzenkai.imaginationoverflow.com/puzzle that is connected to our Sudoku Zenkai game)



    Unfortunately, this is chrome default behavior since version 25 the user needs to take an action to open the deep link, that is why in your case it works on our Test tool but not with an automatic deep link redirect. I looked around and made a few tests and it checks up, no matter how I fake the user interaction chrome on Android won't open a deep link automatically.

    Going with app links seems the only viable option for your use case at the moment, unfortunately, there isn't anything we can do at our end to fix this issue, sorry about that.



    Thanks! Don't forget to leave us a review on the asset store if you can XDD
     
  46. markachten88

    markachten88

    Joined:
    Apr 24, 2015
    Posts:
    31
    Got it all working now. Again, thanks a million!
     
    ImaginationOverflowPT likes this.
  47. TiagoTFG

    TiagoTFG

    Joined:
    Jul 3, 2018
    Posts:
    7
    Hi! Can I somehow disable this exception/error log:
    `Exception: Attention, it seems that you have multiple entitlements file. Only one will be added the Project :`

    This is currently breaking my CD setup and I'd rather have it considered as a warning only (as it seems to be the case) instead of an exception.
     
  48. ImaginationOverflowPT

    ImaginationOverflowPT

    Joined:
    Sep 15, 2017
    Posts:
    186
    Hi,
    It isn't a warning, our plugin doesn't finish the setup if you have more than one entitlement file, since it can't know what file it will be used on the final build.
    If you have the pro version you can remove this behavior on the iOSPosBuild class under the AddDomainAssociation method but we strongly suggest you look at your setup and see why do you have more than on entitlement file.
     
  49. TiagoTFG

    TiagoTFG

    Joined:
    Jul 3, 2018
    Posts:
    7
    Shouldn't it just move forward with the first entitlement file it finds?

    We have two because during our build we generate two IPAs with different provisions, Distribution and Ad Hoc. This is somewhat standard for CD with internal distribution.

    Is there a way to upgrade to PRO from our current purchase?
     
  50. ImaginationOverflowPT

    ImaginationOverflowPT

    Joined:
    Sep 15, 2017
    Posts:
    186
    I get that ;).
    We decided to make the plugin as much fault proof as possible and there is no guarantee that the first we find is the one that will be used for the build.

    You should have an upgrade option on the asset store if you wish to acquire the Pro.

    Let us know if you need further assistance