Firebase 短动态链接 - 等待多个短链接完成
Firebase short dynamic links - wait for multiple short links completion
我正在寻找一种解决方案,用于收集通过 onSuccess 调用创建动态短链接的所有结果。
缩短场景:
fun getShortDynamicLinkUseCase(
onSuccessListener: (ShortDynamicLink) -> Unit
): Task<ShortDynamicLink> = Firebase.dynamicLinks.shortLinkAsync(ShortDynamicLink.Suffix.SHORT) {
link = Uri.parse(uriString)
domainUriPrefix = dynamicLinkHost
}.addOnSuccessListener {
onSuccessListener.invoke(it)
}
}
fun getShortDynamicLink() = launch {
try {
getShortDynamicLinkUseCase.execute(
// calling onSucces for creating dynamic links -> which is async I guess ?
onSuccessListener = { shortLink ->
shortDynamicLinks.add(DynamicLinkData(appType, shortLink.shortLink))
}
)
getShortDynamicLinkSuccess()
} catch (throwable: Throwable) {
getShortDynamicLinkFailed(throwable)
}
}
val shortDynamicLinks = mutableListOf<Uri?>()
fun dummyFun() {
getShortDynamicLink() //adding dynamic link to the list when success performed
getShortDynamicLink() //adding dynamic link to the list when success performed
//refering to the list of dynamic links which is empty as it is performed quicker
//than onSuccess is called in getShortDynamicLink() function
someUseOf(shortDynamicLinks)
}
我注意到您已经在使用 Kotlin Coroutines,所以我建议使用 kotlinx-coroutines-play-services 库。
通过将依赖项添加到您的 gradle 文件,将其包含在您的项目中:
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-play-services:$version'
然后你可以利用他们的 await()
扩展功能:
suspend fun getShortDynamicLinkUseCase(): ShortDynamicLink {
return Firebase.dynamicLinks.shortLinkAsync(ShortDynamicLink.Suffix.SHORT) {
link = Uri.parse(uriString)
domainUriPrefix = dynamicLinkHost
}.await()
}
suspend fun getShortDynamicLink() {
try {
val shortLink = getShortDynamicLinkUseCase().await()
shortDynamicLinks.add(DynamicLinkData(appType, shortLink.shortLink))
getShortDynamicLinkSuccess()
} catch (throwable: Throwable) {
getShortDynamicLinkFailed(throwable)
}
}
fun dummyFun() = launch {
getShortDynamicLink().await() //adding dynamic link to the list when success performed
getShortDynamicLink().await() //adding dynamic link to the list when success performed
//refering to the list of dynamic links which is empty as it is performed quicker
//than onSuccess is called in getShortDynamicLink() function
someUseOf(shortDynamicLinks)
}
我正在寻找一种解决方案,用于收集通过 onSuccess 调用创建动态短链接的所有结果。
缩短场景:
fun getShortDynamicLinkUseCase(
onSuccessListener: (ShortDynamicLink) -> Unit
): Task<ShortDynamicLink> = Firebase.dynamicLinks.shortLinkAsync(ShortDynamicLink.Suffix.SHORT) {
link = Uri.parse(uriString)
domainUriPrefix = dynamicLinkHost
}.addOnSuccessListener {
onSuccessListener.invoke(it)
}
}
fun getShortDynamicLink() = launch {
try {
getShortDynamicLinkUseCase.execute(
// calling onSucces for creating dynamic links -> which is async I guess ?
onSuccessListener = { shortLink ->
shortDynamicLinks.add(DynamicLinkData(appType, shortLink.shortLink))
}
)
getShortDynamicLinkSuccess()
} catch (throwable: Throwable) {
getShortDynamicLinkFailed(throwable)
}
}
val shortDynamicLinks = mutableListOf<Uri?>()
fun dummyFun() {
getShortDynamicLink() //adding dynamic link to the list when success performed
getShortDynamicLink() //adding dynamic link to the list when success performed
//refering to the list of dynamic links which is empty as it is performed quicker
//than onSuccess is called in getShortDynamicLink() function
someUseOf(shortDynamicLinks)
}
我注意到您已经在使用 Kotlin Coroutines,所以我建议使用 kotlinx-coroutines-play-services 库。
通过将依赖项添加到您的 gradle 文件,将其包含在您的项目中:
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-play-services:$version'
然后你可以利用他们的 await()
扩展功能:
suspend fun getShortDynamicLinkUseCase(): ShortDynamicLink {
return Firebase.dynamicLinks.shortLinkAsync(ShortDynamicLink.Suffix.SHORT) {
link = Uri.parse(uriString)
domainUriPrefix = dynamicLinkHost
}.await()
}
suspend fun getShortDynamicLink() {
try {
val shortLink = getShortDynamicLinkUseCase().await()
shortDynamicLinks.add(DynamicLinkData(appType, shortLink.shortLink))
getShortDynamicLinkSuccess()
} catch (throwable: Throwable) {
getShortDynamicLinkFailed(throwable)
}
}
fun dummyFun() = launch {
getShortDynamicLink().await() //adding dynamic link to the list when success performed
getShortDynamicLink().await() //adding dynamic link to the list when success performed
//refering to the list of dynamic links which is empty as it is performed quicker
//than onSuccess is called in getShortDynamicLink() function
someUseOf(shortDynamicLinks)
}