微信6.6.7版本後圖文分享無標題的分析

Update

微信升級到6.7.3之後多圖分享已經完全不能用了,具體可參考個人另外一篇文章《微信6.7.3版本後沒法多圖分享的分析android

Update

無標題的問題能夠經過AccessibilityService解決,親測有效。但不是很推薦這種解決辦法。bash

背景

以前作的一個安卓app能夠把多張圖片和文字標題分享到微信朋友圈。最近微信版本升級到6.6.7之後發現圖片還能夠分享,可是標題不見了。如圖所示: 微信

多圖分享到朋友圈
紅框內原本應該顯示的是和圖片一塊兒分享過去的一段文字。如今顯示不出來了。也有一些同窗經過後臺問我這個問題。那麼讓咱們來看看微信作了什麼樣的改動致使這個現象的。

圖文分享的代碼

咱們先來看看圖文分享到朋友圈的代碼app

Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setType("image/*");
        ComponentName comp = new ComponentName("com.tencent.mm",
                "com.tencent.mm.ui.tools.ShareToTimeLineUI");
        intent.setComponent(comp);
        intent.setAction("android.intent.action.SEND_MULTIPLE");
        intent.setType("image/*");
        //這個就是標題了
        intent.putExtra("Kdescription", 「多圖分享的標題」);
        intent.putExtra(Intent.EXTRA_STREAM, paths);
        context.startActivity(intent);
複製代碼

可見微信那邊的接收方是"com.tencent.mm.ui.tools.ShareToTimeLineUI"。標題就是放在"Kdescription"這個字段裏傳給微信的。標題顯示不出來,那確定是微信新版本對"Kdescription"的解析發生了變化。函數

朔源

爲了搞清楚問題出在哪裏,咱們須要看一下微信6.6.7和以前的版本有什麼變化。那麼,讓咱們請出JADX大法師。先讓大法師對老版本的微信施法,這裏咱們選擇微信6.6.6。一陣煙霧以後。讓咱們看看ShareToTimeLineUI這個類是如何獲取到文本的。 ui

老版本獲取標題
函數 s.j()就是 intent.getStringExtra()包了一層。 那6.6.7版本的微信這裏變成什麼樣了呢?咱們再請出JADX大法師對微信6.6.7施法。結果一樣的位置變成了以下這個樣子:
6.6.7.png
看到區別了嗎?獲取從intent中獲取字符串的key從 "Kdescription"變成了 e$h.thz! 那麼這個 e$h.thz是個什麼鬼?它長這樣:
什麼鬼
它就是在原來 "Kdescription"後面又拼接了個 System.currentTimeMillis()。。。 至此真相大白了。原來是key變了致使咱們發送的標題在微信這邊取不到。若是有同窗說我在構造Intent的時候也用一樣的key不就能夠了嗎?

...
intent.putExtra("Kdescription" + System.currentTimeMillis(), 「多圖分享的標題」);
...
複製代碼

。。。。。。我勸你再想一想。 若是你有黑科技能夠在分享以前從微信獲取到e$h.thz的值,請告訴我。spa

退一步的解決辦法是在分享圖片的同時把標題複製到剪貼板裏,這樣用戶在分享的頁面多操做一步粘貼一下就行了。code

總結

這個「 Kdescription」應該算是微信的一個未對外公開的接口協議。咱們以前利用它來作圖文分享是利用了這個隱藏功能。新版本作的這個改動致使其不可用,這也沒什麼好辦法。教訓就是當咱們想利用一些第三方的不公開功能的時候要慎重,以避免未來掉坑裏難受。cdn

相關文章
相關標籤/搜索