@@ -50,42 +50,40 @@ class DynamicLinksServiceImpl(private val context: Context, private val callingP
5050
5151 override fun getDynamicLink (callback : IDynamicLinksCallbacks , link : String? ) {
5252 Log .d(TAG , " getDynamicLink: callingPackageName: $callingPackageName link: $link " )
53- if (link != null ) {
54- val linkUri = Uri .parse(link)
55- if (" http" == linkUri.scheme || " https" == linkUri.scheme) {
56- lifecycleScope.launchWhenCreated {
53+ lifecycleScope.launchWhenCreated {
54+ try {
55+ if (link == null ) {
56+ throw RuntimeException (" Missing link" )
57+ }
58+ val linkUri = Uri .parse(link)
59+ if (" http" == linkUri.scheme || " https" == linkUri.scheme) {
5760 val response = runCatching { withContext(Dispatchers .IO ) { DynamicLinkUtils .requestLinkResponse(link, queue) } }.getOrNull()
58- val data = if (response == null ) {
59- DynamicLinkData (null , link, 0 , 0 , null , null )
60- } else {
61- DynamicLinkData (
62- response.metadata?.info?.url, response.data_?.intentData, (response.data_?.app?.minAppVersion ? : 0 ).toInt(), System .currentTimeMillis(), null , null
63- )
61+ ? : throw RuntimeException (" requestLinkResponse failed" )
62+ val data = DynamicLinkData (link, response.data_?.intentData, (response.data_?.app?.minAppVersion ? : 0 ).toInt(), System .currentTimeMillis(), null , null )
63+ Log .d(TAG , " getDynamicLink: $link -> $data " )
64+ callback.onStatusDynamicLinkData(Status .SUCCESS , data)
65+ return @launchWhenCreated
66+ }
67+ val deepLink = linkUri.getQueryParameter(" link" )
68+ if (! deepLink.isNullOrEmpty()) {
69+ val packageName = linkUri.getQueryParameter(" apn" )
70+ val amvParameter = linkUri.getQueryParameter(" amv" )
71+ if (packageName == null ) {
72+ throw RuntimeException (" Missing package name" )
73+ } else if (callingPackageName != packageName) {
74+ throw RuntimeException (" Registered package name:$callingPackageName does not match link package name: $packageName " )
6475 }
76+ var amv = amvParameter?.takeIf { it != = " " }?.toInt() ? : 0
77+ val data = DynamicLinkData (link, deepLink, amv, 0 , null , null )
6578 Log .d(TAG , " getDynamicLink: $link -> $data " )
6679 callback.onStatusDynamicLinkData(Status .SUCCESS , data)
80+ return @launchWhenCreated
6781 }
68- return
69- }
70- val packageName = linkUri.getQueryParameter(" apn" )
71- val amvParameter = linkUri.getQueryParameter(" amv" )
72- if (packageName == null ) {
73- throw RuntimeException (" Missing package name" )
74- } else if (callingPackageName != packageName) {
75- throw RuntimeException (" Registered package name:$callingPackageName does not match link package name: $packageName " )
76- }
77- var amv = 0
78- if (amvParameter != null && amvParameter != = " " ) {
79- amv = amvParameter.toInt()
82+ throw RuntimeException (" $link is not a valid dynamic link" )
83+ } catch (e: Exception ) {
84+ Log .d(TAG , " getDynamicLink: error : ${e.message} " )
85+ callback.onStatusDynamicLinkData(Status .SUCCESS , null )
8086 }
81- val data = DynamicLinkData (
82- null , linkUri.getQueryParameter(" link" ), amv, 0 , null , null
83- )
84- Log .d(TAG , " getDynamicLink: $link -> $data " )
85- callback.onStatusDynamicLinkData(Status .SUCCESS , data)
86- } else {
87- Log .d(TAG , " getDynamicLink: " + null + " -> " + null )
88- callback.onStatusDynamicLinkData(Status .SUCCESS , null )
8987 }
9088 }
9189
0 commit comments