- Перейдите к Chatbotwebfragment.
- call senddatatochatbot (isfromonboarding = true) (где есть Isfromonboding, указывает на Pre-login). /> ожидаемый и актуальный: чат-бот загружает правильный экран до логинов. < /p>
< /li>
< /ul>
2. Пользователь входит в систему (за пределами фрагмента), затем перейти обратно в ChatbotwebFragment (пост-логин): < /strong> < /p>
Перейдите к чат-ботвейбфрагменту снова. Состояние пост-логин с различными значениями заголовка). - Ожидается: чат-бот загружает экран пост-логин, используя новые заголовки. /> < /ul>
3. Верните и снова обратитесь к чат-ботвебфрагменту (все еще пост-логин): < /strong> < /p>
Перейдите к чатботвебфрагменту в третий раз. < /Li>
Call Sendatatochatbot (isfromonboard = false). экран. Похоже, что вторая попытка загрузить с помощью заголовков с пост-логинами не может обновить то, что использует WebView, но последующая попытка с теми же заголовками пост-логин затем работает. Соответствующий код из чатботвебфрагмента.kt:
class ChatBotWebFragment : Fragment() {
private lateinit var binding: FragmentChatbotWebviewBinding // Assuming ViewBinding
private var isFromOnBoarding: Boolean = false
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
isFromOnBoarding = arguments?.getBoolean(Constants.IS_FROM_ONBOARDING, false) ?: false
initWebView()
binding.webView.loadUrl("CHAT_BOT_URL")
}
private fun initWebView() {
binding.webView.apply {
// ... other WebView settings (JS enabled, etc.)
settings.cacheMode = WebSettings.LOAD_NO_CACHE // Attempting to disable cache
clearCache(true)
clearHistory()
CookieManager.getInstance().removeAllCookies(null)
CookieManager.getInstance().flush()
webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
Log.d("ChatBotWebFragment", "PageFinished: isFromOnBoarding = $isFromOnBoarding")
sendDataTOChatBot(isFromOnBoarding)
}
// ... other WebViewClient methods (shouldOverrideUrlLoading, onReceivedError etc.)
}
// ... webChromeClient setup
}
}
private fun sendDataTOChatBot(isUserOnBoarding: Boolean) {
val headerJsonObject = JSONObject()
try {
// Simplified: Actual values come from AppPreference
if (isUserOnBoarding) {
Log.d("ChatBotWebFragment", "Sending PRE-LOGIN headers")
headerJsonObject.put("is_logged_in", false)
// ... other pre-login specific headers
} else {
Log.d("ChatBotWebFragment", "Sending POST-LOGIN headers")
headerJsonObject.put("Authorization","access token")
headerJsonObject.put("is_logged_in", true)
// ... other post-login specific headers
}
} catch (e: JSONException) {
e.printStackTrace()
}
// The JavaScript that dispatches the event with header details
val javascriptCode = """
var event = new CustomEvent("androidHeaders", { detail : $headerJsonObject});
window.dispatchEvent(event);
// console.log("Dispatched androidHeaders with:", $headerJsonObject); // For web debugging
""".trimIndent()
Log.d("ChatBotWebFragment", "Executing JS: $javascriptCode")
binding.webView.evaluateJavascript(javascriptCode, null)
}
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... earing-cac
Мобильная версия