DynamicLinksForFirebase.kt
package chat.rocket.android.dynamiclinks
import android.content.Context
import android.content.Intent
import android.net.Uri
import androidx.core.net.toUri
import chat.rocket.android.R
import com.google.firebase.dynamiclinks.DynamicLink
import com.google.firebase.dynamiclinks.FirebaseDynamicLinks
import com.google.firebase.dynamiclinks.ShortDynamicLink
import timber.log.Timber
import javax.inject.Inject
class DynamicLinksForFirebase @Inject constructor(private var context: Context) : DynamicLinks {
private var deepLink: Uri? = null
private var newDeepLink: String? = null
override fun getDynamicLink(intent: Intent, deepLinkCallback: (Uri?) -> Unit?) {
FirebaseDynamicLinks.getInstance()
.getDynamicLink(intent)
.addOnSuccessListener { pendingDynamicLinkData ->
if (pendingDynamicLinkData != null) {
deepLink = pendingDynamicLinkData.link
}
deepLinkCallback(deepLink)
}
.addOnFailureListener { Timber.e("getDynamicLink:onFailure : $it") }
}
override fun createDynamicLink(
username: String?,
server: String,
deepLinkCallback: (String?) -> Unit?
) {
FirebaseDynamicLinks.getInstance().createDynamicLink()
.setLink("$server/direct/$username".toUri())
.setDomainUriPrefix("https://" + context.getString(R.string.dynamic_link_host_url))
.setAndroidParameters(
DynamicLink.AndroidParameters.Builder(context.packageName).build()
)
.setSocialMetaTagParameters(
DynamicLink.SocialMetaTagParameters.Builder()
.setTitle(username)
.setDescription(
context.getString(
R.string.msg_dynamic_link_description,
username,
server
)
)
.build()
)
.buildShortDynamicLink(ShortDynamicLink.Suffix.SHORT)
.addOnSuccessListener { result ->
Timber.i("DynamicLink created: $newDeepLink")
newDeepLink = result.shortLink.toString()
deepLinkCallback(newDeepLink)
}.addOnFailureListener {
Timber.e("Error creating dynamicLink.")
deepLinkCallback(null)
}
}
}