界面跳转
路由跳转
SDK提供路由跳转接口,支持跳转到对应的deeplink。
接口定义
UrlRouter
方法 | 参数 | 返回值 | 说明 |
---|---|---|---|
with | context: Context? | UrlRouter | 静态方法,获取UrlRouter实例 |
url | url: String? | UrlRouter | 网页url / woa deeplink |
url | uri: Uri? | UrlRouter | 网页url / woa deeplink |
bundle | bundle: Bundle | UrlRouter | 设置携带的Bundle |
start | finishAfterStart: Boolean 启动之后,是否需要关闭之前的页面 默认false | 进行跳转,不返回结果,不支持的链接会有默认Toast | |
startWithResult | finishAfterStart: Boolean 启动之后,是否需要关闭之前的页面 默认false | Boolean | 跳转并返回处理结果,没有默认处理,不支持的链接不会默认Toast |
代码示例
kotlin
UrlRouter.with(activity)
.url("/")
.start()
路由拦截器
如果需要拦截内部默认的跳转行为时, 可以通过实现拦截器拦截内部路由事件。
接口定义
KUrlInterceptor
:
方法 | 参数 | 返回值 | 说明 |
---|---|---|---|
intercept | chain: Chain<KUrlChainData> | ChainState<KUrlChainData> | 实现该方法,达到自定义跳转deeplink |
KUrlChainData
参数 | 类型 | 说明 |
---|---|---|
context | Context | 上下文 |
uri | Uri | uri |
bundle | Bundle? | 自定义数据 |
finishAfterStart | Boolean | 默认false 启动之后,是否需要关闭之前的页面 |
代码示例
- 继承
KUrlInterceptor
,实现intercept
方法:
kotlin
import com.kingsoft.kim.kit.KIM
import com.kingsoft.kim.kit.api.KIMISdkKitService
import com.kingsoft.kim.kit.extension.router.KUrlChainData
import com.kingsoft.kim.kit.extension.router.KUrlInterceptor
import java.util.*
class MyDeeplinkInterceptor : KUrlInterceptor() {
override fun intercept(chain: Chain<KUrlChainData>): ChainState<KUrlChainData> {
if (chain.data.type != MY_DEEP_LINK) {
return chain.doNext(chain.data)
}
if (Objects.equals(PATH_LOCATE, chain.data.uri.path)) {
//自定义的跳转逻辑
//startFragment/startActivity
return chain.end(chain.data)
}
return chain.doNext(chain.data)
}
private fun locateBySeq(chain: Chain<KUrlChainData>, chatId: String, seq: Long) {
KIM.getService().getLinkUpService(KIMISdkKitService::class.java)
?.openChat(chain.data.context, chatId, "", seq)
}
companion object {
private const val MY_DEEP_LINK = 15
private const val PATH_LOCATE = "/my"
}
}
- 注册
MyDeeplinkInterceptor
kotlin
import com.kingsoft.kim.kit.extension.MyDeeplinkInterceptor
import com.kingsoft.kim.kit.extension.router.KUrlInterceptor
import com.wps.woa.lib.meatframe.KConf
import com.wps.woa.lib.meatframe.KIMInterceptor
import com.wps.woa.lib.meatframe.KIMSdkApplication
import com.wps.woa.lib.meatframe.confTo
import com.wps.woa.lib.meatframe.kConfOf
class AppCustomizeApplication : KIMSdkApplication() {
override fun confInterceptor(): KConf<KIMInterceptor<out KIMInterceptor.ChainData>> {
return kConfOf(
KUrlInterceptor::class.java confTo MyDeeplinkInterceptor::class.java
)
}
}
- 在AndroidManifest.xml中自定义
AppCustomizeApplication
kotlin
<meta-data
android:name="com.kingsoft.kim.kit.sample.custom.AppCustomizeApplication"
android:value="@string/kim_sdk_application" />