Deeplink now working with specific screen and input parameters

Hi,

I am trying to launch the OutSystems mobile application from another third party application(built in Native Android) on Android device. I want to open a specific screen which is default screen of my application and has anonymous access. This screen has an input parameter. When I am trying to launch the application from native application with input parameter, nothing happens meaning I am not redirected to my OutSystems app. However, if I remove the input parameters, my OutSystems app gets launched. Here is what I am trying to do in Android code:


val pm = applicationContext.packageManager
        val intent:intent? = pm.getLaunchIntentForPackage("appidentifier://MyModule/DefaultScreen?ClientId=1234")
        intent?.addCategory(Intent.CATEGORY_LAUNCHER)
        if(intent!=null){
            applicationContext.startActivity(intent)
        }else{
            println("Intent is null.")
        }

I am getting Intent in null. if I use the parameter ClientId=1234, If I don't use it it works fine.


Can someone help me here and suggest if I am doing anything wrong here?

Hi Akshay,

I haven't done native Android in a couple of years, but have you tried passing those inputs outside of the link, and within the intent? With this syntax:

https://stackoverflow.com/questions/2405120/how-to-start-an-intent-by-passing-some-parameters-to-it/

Thanks Afonso. How should I read them in OutSystems app?

I don't think there's any Outsystems functionality out-of-the-box for capturing Intents, you'd have to find or build a Cordova plugin that would allow you to read the Intent parameters.

I was looking at the deep link documentation and your format looks correct:

https://success.outsystems.com/Documentation/Development_FAQs/How_to_Define_Mobile_App_Deep_Links

Could it be an escaping issue with the question mark/equal sign?

This is working for Android now with following code:

val packageName = "iappIdentifier"
val context = getActivity()
val pm = context!!.packageManager

val myAction = Uri.parse(“appIdentifier://Module/Screen?UserName=username&Password=password”)
val intent: Intent? = pm.getLaunchIntentForPackage(packageName)

if(intent!=null){
    intent!!.setAction(Intent.ACTION_VIEW)
    intent!!.setData(myAction)
    context!!.startActivity(intent)
}else{
    Toast.makeText(activity!!, "Please install the App", Toast.LENGTH_SHORT).show()
}

But I am struggling to get this working for iOS. Here is the code I am trying:


UIApplication.shared.open(URL.init(string: url)!, options: [:], completionHandler: nil)
let url = "“appIdentifier://MyModule/DefaultScreen?ClientId=1234"
UIApplication.shared.open(URL.init(string: url)!, options: [:], completionHandler: nil)


Has anyone faced this and can help me resolve?


Thank you.