Wechsel von iOS zu Android

Stelle deine Frage öffentlich an die Threema-Forum-Community - über 3.000 Mitglieder helfen dir weiter. Los gehts!
Unterstützung von offizieller Seite erhältst du direkt bei Threema: Zum offiziellen Threema-Support
  • Ich habe eine neues IPhone 6 Plus und eine Samsung S3. Beide Geräte will ich mittels einer Twincard aktiv halten und darauf jeweils, nach Bedarf, mit Threema arbeiten.


    Kann ich für beide Geräte mit der gleichen ID arbeiten?

    "Ich bin ja mit dem lieben Gott so weit einverstanden, aber dass er der Klugheit Grenzen gesetzt hat und der Dummheit nicht, das nehme ich ihm wirklich übel"


    Konrad Adenauer (05.01.1876 - 19.04.1967)

  • Hallo alle zusammen, und ganz besonders black-falcon und simmac!
    Es ist beruhigend zu lesen, dass ich nicht der einzige mit diesem Problem bin und ihr auch dabei seid, eine Lösung dafür zu finden.


    Ich will auch meine Threema Konversationen von iPhone zu Cyanogen migrieren. Threema ID ist gesichert und auf Android eingespielt.
    Da das iPhone gejailbreakt ist, habe ich den kompletten "Documents" Ordner aus Threema exportiert. Die interessante Datei scheint dort ja nur die "ThreemaData.sqlite" zu sein.
    Die Bilder und Videos liegen dann im Unterordner "\.ThreemaData_SUPPORT\_EXTERNAL_DATA\". Dort müssen sie nur mit der richtigen Dateiendung versehen werden (bei mir jpg und mp4) und schon lassen sich diese öffnen.
    Alle anderen Dateien sind viel zu klein, als dass dort interessanter Inhalt drin sein könnte.


    Aber das wusstest ihr glaube ich alles schon.



    Wie ist denn die SQL Datei Formatiert?


    Hierzu kann ich euch vllt etwas neues sagen. Mit dem iPhone (mit iFile und SQLite3 Editor) konnte ich die Datei öffnen.
    In der Tabelle "ZMESSAGE" in der Spalte "ZTEXT" sind alle Nachrichten im Klartext zu sehen. Es gibt noch Spalten wie "ZDATE", "ZDELIVERYDATE", "ZREADDATE", die float-Zahlen enthalten.
    In der Tabelle "ZVIDEODATA" sind unter "ZDATA" IDs, die aber nicht mit den IDs der Video-Dateien übereinstimmen.
    Das selbe gilt wohl für "ZIMAGEDATA".
    In "ZCONVERSATION" ist je ein Eintrag für jede Konversation, wie der Name vermuten lässt, mit "Z_OPT" (int) vermutlich Anzahl der Nachrichten u.a.


    Die Idee mit dem Shell-Script finde ich richtig gut! Fände super, wenn wir da etwas auf die Beine bekommen würden!


    Vielen Dank schonmal
    TwinDevice


    PS. Unter Windows habe ich die sqlite-Datenbank leider noch nicht öffnen können. Einziges Programm, das ich gefunden hab war "Black Cat Manager", was aber beim Öffnen "Database master table error: file is encrypted or is not a database". Habt ihr da noch nen anderes Programm mit dem man das eventl. geöffnet bekommt?


  • Ich schau mir bei Gelegenheit mal die SQL der Android Version an und schau, ob ich Gemeinsamkeiten finde.
    Ich will aber nichts versprechen, weil ich momentan ziemlich im Stress bin wegen Schule und alles was damit zusammen hängt.


    Na klar, verständlich. Wer hat schon keinen Stress :)


    Habs jetzt mit "DB Browser for SQLite" unter Windows geöffnet bekommen.


    Unter Android hab ich mir das Backup auch schonmal angeschaut und es sind hauptsächlich csv-Dateien, in denen die Nachrichten gespeichert werden.
    Die sollten ja einfacher zu generieren sein, als andersherum... ;)

  • Also ich versuche mal die Verbindungen herzustellen.
    Unter iOS ist alles (außer Fotos und Videos) in einer sqlite-DB.
    Unter Android gibt es pro Kontakt eine csv-Datei.


    sqlite-Struktur unter iOS:
    Tabelle "ZCONTACT", Spalte "ZIDENTITY" beinhaltet die Threema-ID des Kontakts und hat als PrimaryKey "Z_PK" einen Int-Wert.
    Der PrimaryKey (aus "ZCONTACT") findet sich in Tabelle "ZCONVERSATION" unter "ZCONTACT" als Fremdschlüssel und hat wiederrum "Z_PK" mit Int-Wert als PrimaryKey.
    Der PrimaryKey (aus "ZCONVERSATION") ist in Tabelle "ZMESSAGE" der Fremdschlüssel "ZCONVERSATION".
    Die Spalte "ZISOWN" ist ein boolean der anzeigt, ob die Nachricht gesendet (1) oder empfangen (0) wurde.


    Threema-Backup Struktur unter Android:
    Filename: message_<Threema-ID>.csv
    Kopfzeile: "apiid","uid","isoutbox","isread","issaved","messagestae","posted_at","created_at","modified_at","type","body","isstatusmessage"
    Matching?: ZID,?,ZISOWN,ZREAD,?,?,ZDATE,ZDELIVERYDATE,ZREADDATE,<"TEXT">,ZTEXT,?

  • Also mit recht simplem editieren der CSV-Datei habe ich Nachrichten wiederherstellen können.


    Folgender Beispieleintrag:
    "2665da7c405de759","","1","1","1","","437764640","437765494","","TEXT","Test 123","0"


    Man muss nach dem Bearbeiten der CSV die ZIP-Datei wieder packen. Auch wenn man es ohne Passwort packt, wird das Passwort was bei der Erstellung angegeben wurde abgefragt... komisch, naja klappt aber.


    Ergebnis:
    Neue Nachricht in der Konversation mit dem Text als "von mir geschrieben" und Datum/Uhrzeit "6. Jan 1970 02:36". Da muss also noch konvertiert werden.


    Find ich schonmal recht gut! :)
    Gute Nacht!

  • Also falls das Thema noch jemanden interessiert. Ich habe es jetzt erfolgriech umgesetzt.


    Wie oben beschrieben, müssen im Grunde nur die aus SQLite exportierten Tabellen mit Excel auf die Konversation gefiltert und pro Kontakt in eine sepaerate Datei gespeichert werden. Die Spalten müssen nach oben angegebenen Muster umsortiert werden.


    Anschließend muss die Date-Spalte noch mit folgender Formel aus der "Mac Absolute Time" in die "Unix Timestamp" umgerechnet werden:
    y=(x+978307200)*1000
    Die Basis von Unix ist 1.1.1970 und die Basis bei Mac ist 1.1.2001; daher die 31 Jahre in Sekunden als Differenz (978307200).
    Das war bei mir die größte Hürde.


    Sonderzeichen können noch per Suchen/Ersetzen umgewandelt werden.
    Anschließend kann einfach in einer erzeugten Backup-Datei aus Android die CSV-Dateien mit den selbst erzeugten pro Kontakt ersetzt werden und wieder importiert werden.


    Somit stimmen alle Zeiten in der Konversation, es ist den richtigen Kontakten zugeordnet; lediglich einige Smilies oder Umlaute werden fehlerhaft dargestellt, aber ich denke damit kann man leben.
    Das zurücksichern von Bildern habe ich mir gespart, da ich in einem früheren Posting schon beschrieben habe, wie diese zumindest lesbar exportiert werden können.


    Ich hoffe, ich konnte damit jemandem helfen.
    Und zumindest ist die Aussage von Threema wiederlegt, dass man nicht zwischen Android und iOS Konversationen migrieren kann.

  • Respekt für deine Arbeit, ich werde den Thread mal oben anpinnen da er wahrscheinlich noch öfters gebraucht wird und nun eine Lösung bereitsteht, andersherum sollte das ja dann auch machbar sein.

    Alt Gerät: LG Google Nexus 4 16GB OS: Android 5.1.1 Root Kernel: Stock Recovery: TWRP
    Neu Gerät: bq Aquaris M5 32GB/3GB OS: Android 5 Kernel: Stock Recovery: Stock


    Threema-Version: 2.51 (241)

  • Toll, vielleicht komme ich ja noch dazu, ein Skript dafür zu schreiben, sollte ja jetzt kein großer Aufwand mehr sein. ;)
    Das mit den Sonderzeichen geht vielleicht auch noch.


    Eine beispielhafte iOS SQL würde mir dabei trotzdem noch helfen, falls mir da jemand eine von einer Test ID ohne private Daten geben könnte, wäre das sehr hilfreich.

  • Hallo zusammen.
    Tolle Arbeit und danke für die Infos.


    Ich habe das alles jetzt mal in ein Bash skript gepackt.


    Ausser Nachrichten migrieren geht inzwischen auch Bilder und Videos exportieren.
    Leider sehe ich keine Möglichkeit auf Android Bilder und Videos aus einem Backup zu importieren.
    Wer das rausfindet kann das Skript gern erweitern.


    Skript gibts hier: http://www.noernet.de/IosToAndroid/
    Alles weitere steht im Skript.


    Viel Spaß damit.

  • Hallo,
    supercool was ihr hier geschafft habt!
    Ich hab da mal ne Frage zu: ich habe es soweit geschafft, das Skript mit Cygwin zu starten (wenn ich das richtig verstanden habe, braucht man ja unter Windows ein zusätzliches Programm um Bash Skripte auszuführen). Leider krieg ich dann folgende Meldung:

    Zitat


    ./ThreemaDataFromIosToAndroid.sh: Zeile 53: sqlite3: Kommando nicht gefunden.
    Threema-IDs (ZIDENTITYs) in Backup found: 0


    Hat von euch jemand ne Ahnung was man da machen kann? Ich kenne mich mit Skripts und Co leider gar nicht aus :huh:


    Vielen Dank im voraus :)
    jufendes

  • Du brauchst ein sqlite3 in deinem Cygwin.. Das kannst du im Cygwin installer als packet auswählen...
    Kenn mich mit Cygwin aber auch nicht so aus (hab linux ;))

  • Hallo zusammen.
    Ich suche aktuell einen Weg genau den umgekehrten Weg zu gehen.
    Also von Android zu iOS, was ja theoretisch auch möglich sein sollte.


    Ein fertiges Script wie es derget so schön erstellt hat gibt es für meinen Zweck nicht zufällig?


    Gruß

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden