Für iOS verwende ich google-api-objectivec-client-for-restFür Android verwende ich die Methode mit contentResolver und ContentValues
calendar-provider
Ich verstehe, dass auf der iOS-Seite die Rest-API verwendet wird und auf der Die andere Seite auf Android nutzt den Inhalt Anbieter.
Um die Ereignisse nicht zu duplizieren, habe ich die ID von Android verwendet, die ein langer Wert ist. Als ich es auf iOS implementiert hatte, fand ich heraus, dass die ID ein String ist (sehr lang und nicht ganzzahlig).
Auf iOS habe ich herausgefunden:
Code: Select all
**
* Opaque identifier of the event. When creating new single or recurring
* events, you can specify their IDs. Provided IDs must follow these rules:
* - characters allowed in the ID are those used in base32hex encoding, i.e.
* lowercase letters a-v and digits 0-9, see section 3.1.2 in RFC2938
* - the length of the ID must be between 5 and 1024 characters
* - the ID must be unique per calendar Due to the globally distributed nature
* of the system, we cannot guarantee that ID collisions will be detected at
* event creation time. To minimize the risk of collisions we recommend using
* an established UUID algorithm such as one described in RFC4122.
* If you do not specify an ID, it will be automatically generated by the
* server.
* Note that the icalUID and the id are not identical and only one of them
* should be supplied at event creation time. One difference in their semantics
* is that in recurring events, all occurrences of one event have different ids
* while they all share the same icalUIDs.
*
* identifier property maps to 'id' in JSON (to avoid Objective C's 'id').
*
@property(nonatomic, copy, nullable) NSString *identifier;
Ich habe versucht, auf der Android-Seite nach der undurchsichtigen ID zu suchen, kann sie jedoch in den Dokumenten nicht finden. Und dies geschieht wahrscheinlich mit Absicht, da ContentUris.withAppendedId(CalendarContract.Events.CONTENT_URI, googleID) tatsächlich eine lange ID als ID benötigt.
Ich habe hier eine ähnliche Antwort gefunden und ich habe es befolgt und auf der Android-Seite eine benutzerdefinierte UID für den Parameter CalendarContract.Events.UID_2445 festgelegt. (da es nicht automatisch generiert wird, selbst wenn ich versuche, nach dem Einfügen eine Abfrage durchzuführen)
Code: Select all
UUID.randomUUID().toString()
.replace("-", "")
.lowercase()
Ich habe versucht, alle Ereignisse und Spalten abzurufen, um zu sehen, ob ich sie durch eine Abfrage erhalten kann, aber eigentlich ist es kein Feld.
Zum Beispiel habe ich auf der Android-Seite uID = festgelegt 62b92a9f626c4a7da7653f7f5c758d04
aber unter iOS bekomme ich Folgendes:
[img]https://i.sstatic .net/T9EcDHJj.png[/img]
Dieser Unterschied zwischen der API wurde absichtlich gemacht?
Soll ich die Rest-API auf Android verwenden, um dasselbe zu erhalten? Ich habe keine sofort einsatzbereiten gefunden.
Wie kann ich die Ereignisse zwischen Android und iOS synchronisieren, wenn die generierten Ereignis-IDs unterschiedlich sind?