0

I have a WebView with WebChromeClient set to capture Console logs

            this.setWebChromeClient(object : WebChromeClient() {
            override fun onConsoleMessage(consoleMessage: ConsoleMessage): Boolean {
                Log.d("WebView Console Logs", consoleMessage.message())
                return true
            }
        })

The Console logs have nested Objects like this

sendCKSession {isICDP: false, ckSession: '46__53__AZ5uHA2kBwzzONCyVNuHNutNbV3SLzNYjfC+s30sru…SVm9uSERQT2RnZEZzd2VTS1djTlZTVGYvZjBnZDlWTmU5In0=', permissions: Array(1), appInfo: {…}, pcsDeleted: false, …}appInfo: {AppId: '1261755406', ContainerId: 'iCloud.Wasiq.Migraine', AdditionalSalt: 'b440efde65bb8c1f45464598470f4cc73977f2c10d6c40587588ec9f1c1c56f0', LogoURL: 'https://is1-ssl.mzstatic.com/image/thumb/Purple114…07emarketing-0-0-0-7-0-0-85-220.png/512x512bb.png', AppDiscoverable: 'false', …}ckSession: "46__53__AZ5uHA2kBwzzONCyVNuHNutNbV3SLzNYjfC+s30srufbRfzTP3KbOAhf0EizHZUYalHLbawTle6UEIzXr5rQIwS/m3Hu4edp4GKxArcPdSkUpcuUJ4h3fEk0d5nY3emz5iAM6Oe2JMH6TP2z0RCBI1yffQjomvyAXhrKAgHVpdonLM6xv9Xu+qI+YLdyS30Q3HC/gutjYUF/MalaMmvi2Cf9/rV9b92fGcy6usVSuS2/XHdVmgO+fc1CYN4f5rvAQNOrYuZhCokP5KaNDEvdmjrd6zTNmbCh34Lgga82D2SM+Lla1RlHOZQFUDrQJL2GO4u/mEI5oGjnGnR5nNQ178PqZ2eC+odYshiFYaQJYB4AFeAitXeuZpgiyzrmjZdLaAMSfYJG23T3G+YBHUKEmmj1NZWOZ7pQs2b9q5cHtKkl1Q==__eyJYLUFQUExFLVdFQkFVVEgtUENTLUNsb3Vka2l0IjoiUVhCd2JEb3hPZ0c4N2g1d3FydGtVUnVVRG1TVUNVOUJaRmVOQmgxd1ZVTVc1WkhzcTlMYUtjanBOWVJoTFFyK05vL25lZXBsaE0ybk1SY2tjcjMvYksxWjlxQld2cy91IiwiWC1BUFBMRS1XRUJBVVRILVBDUy1TaGFyaW5nIjoiUVhCd2JEb3hPZ0crTktqSGNqbVoxVUFKZ2FCNHV0NytxdElrZGJDaGhleGs1WmV6UUJBWVR3bDEzME93aWxSVm9uSERQT2RnZEZzd2VTS1djTlZTVGYvZjBnZDlWTmU5In0="isICDP: falsepcsDeleted: falsepermissions: [{…}]status: 0[[Prototype]]: Object

I want to capture the ckSession object inside sendCKSession

However, on Logcat, I only see

sendCKSession [object Object]

How do I parse the object and fetch ckSession?

Mohamed Wasiq
  • 490
  • 4
  • 17

1 Answers1

0

I think you need to convert this object to JSON and then pull data from it.

I changed your method. It receives an object ConsoleMessage, converts it to JSON . After that, I pull objects from it by keys(sendCKSession and ckSession).

override fun onConsoleMessage(consoleMessage: ConsoleMessage): Boolean {
            val messageString = consoleMessage.message()
            val jsonObject = JSONObject(messageString)
            if (jsonObject.has("sendCKSession")) {
                val sendCKSessionObject = jsonObject.getJSONObject("sendCKSession")
                val ckSession = sendCKSessionObject.getString("ckSession")
                Log.d("ckSession", ckSession)
            }
            return true
    }

In some situations, your JSON may be empty, in which case checks or try-catch can be added.

Ivan Abakumov
  • 128
  • 1
  • 13
  • Thanks for your answer. But it did not work. I think the JSON parsing has to be done at browser level by injecting a javascript. Related question -> https://stackoverflow.com/questions/29844121/console-message-captured-by-onconsolemessage-is-incomplete – Mohamed Wasiq Jul 31 '23 at 06:51
  • @MohamedWasiq Can you send a link that returns this data(**sendCKSession [object Object]**) to you? – Ivan Abakumov Jul 31 '23 at 08:04
  • After visiting https://api.apple-cloudkit.com/database/1/iCloud.Wasiq.Migraine/development/private/users/current?ckAPIToken=b440efde65bb8c1f45464598470f4cc73977f2c10d6c40587588ec9f1c1c56f0 you'll get redirectURL which asks for logging in with Apple ID. After logging in, you can monitor the console logs which returns sendCKSession – Mohamed Wasiq Jul 31 '23 at 13:50