Play Install Referrer Library返回不完整URL,如何免自定义解析获参数?
referrerClient = InstallReferrerClient.newBuilder(context).build()
referrerClient.startConnection(object : InstallReferrerStateListener {
override fun onInstallReferrerSetupFinished(responseCode: Int) {
when (responseCode) {
InstallReferrerClient.InstallReferrerResponse.OK -> {
val response: ReferrerDetails = referrerClient.installReferrer
val referrerUrl: String = response.installReferrer
referrerClient.endConnection()
}
...
}
}
})
--- # 解决方案 给返回的查询参数字符串拼接一个空的URL前缀(比如`http://dummy/?`),就能让`Uri.parse()`正确识别为有效的URI,进而直接调用`Uri`的API获取各个查询参数,完全不用自定义解析逻辑。 修改后的代码示例: ```kotlin InstallReferrerClient.InstallReferrerResponse.OK -> { val response: ReferrerDetails = referrerClient.installReferrer val referrerUrl: String = response.installReferrer // 拼接前缀构造合法URI val validUri = Uri.parse("http://dummy/?$referrerUrl") // 直接提取UTM参数 val utmSource = validUri.getQueryParameter("utm_source") val utmMedium = validUri.getQueryParameter("utm_medium") val utmCampaign = validUri.getQueryParameter("utm_campaign") val utmTerm = validUri.getQueryParameter("utm_term") val utmContent = validUri.getQueryParameter("utm_content") referrerClient.endConnection() }
这个方法的核心是利用Uri类对标准URI格式的支持,拼接的http://dummy/?只是占位用的合法前缀,不会产生任何网络请求,仅仅是为了让查询参数部分符合URI的结构要求,这样就能直接使用系统提供的API来提取参数,避免了自己处理字符串分割、编码等问题。
内容的提问来源于stack exchange,提问作者Abdul Mateen
相关产品推荐
相关产品推荐

