這系列拖了好幾年終於寫第二篇了。
這次要教的是如何把簡訊(或 iMessage )的對話合併。
有時候我們的朋友電話號碼換了,但由於簡訊的「名字」是跟著電話走的,
所以一旦刪除舊的電話號碼,就會造成該對話串變成不會顯示朋友的名字。
或者,因為換了電話,造成簡訊列表同一個人有多個對話串…
這次的教學就是教你如何把這些問題解決。
本範例是在 iOS 8.1.x 上面執行的,其他 iOS 版本不保證可以使用。
跟前一個教學一樣,你需要 Firefox + SQLite Manager
以下會示範如何把一個 iMessage (電子郵件) 的對話整合到電話號碼中。
首先,用 SQLite Manager 開啟 SMS.db,怎麼抓 SMS.db 應該不用我再教了吧!
接著,在 chat 的 table 下面,找到對應的 GUID ,例如我們這邊是 squirrel_*****(後面隱藏),
這邊的 ROWID,把他記起來,範例中是 145。
如果你要用 SQL 查的話,可以用這個指令:
SELECT * FROM chat WHERE guid LIKE '%關鍵字%'
相同的,再找到目標的電話號碼,我就不附帶圖片了,這邊範例是 102。
所以我們的思路應該是:把所有跟「145」的對話換成「102」,這樣就整合了。
接著到 chat_handle_join 裡面,找到 chat_id 為剛剛的 id 的欄位,看 handle_id 為何,
如果 chat_id 不等於 handle_id 的話,你要記住 handle_id 的值,
範例中因為剛好一樣,所以不必另外記。
但如果不一樣的話,最壞情況是你要記住四個值:
- 來源的 chat_id
- 來源的 handle_id
- 目標的 chat_id
- 目標的 handle_id
接著按 SQLite Manager 的「Execute SQL」,
在 EnterSQL 欄位輸入:
UPDATE message SET handle_id = REPLACE (handle_id, '來源handleID', '目標handleID') WHERE handle_id = 來源handleID
在本範例中,是
UPDATE message SET handle_id = REPLACE (handle_id, '145', '102') WHERE handle_id = 145
按「Run SQL」,如果沒出現錯誤即可。
之後再輸入
UPDATE chat_message_join SET chat_id = REPLACE (chat_id, '來源chatID', '目標chatID') WHERE chat_id = 來源chatID
在本範例中是
UPDATE chat_message_join SET chat_id = REPLACE (chat_id, '145', '102') WHERE chat_id = 145
一樣,Run SQL。
最後,關閉 SQLite Manager,確定該資料夾內「沒有」 sms.db-shm 跟 sms.db-wal 兩個檔案,
再完全關閉 iPhone 上的簡訊 App(多工列關閉)
然後再把 sms.db 再丟回去 iPhone 內,刪除 iPhone 的 sms.db-shm 跟 sms.db-wal,
之後修改 sms.db 權限,重新開機就好了。(一旦要重新開機,不可單純 respring)
丟回去的詳細教學可以參考這篇
重開機之後,你可以看之前其他的對話內容是否被清空了,如果被清空代表成功整合了
如果你有 iMazing 這個 Mac App 的話,可以讀取簡訊內容,看是否整合成功
(或者你要在手機裡面慢慢往上滾動也可以啦,只是要很久)