iPhoneのカレンダー同期その3(ExchangeとCalDAV比較)

iPhoneのカレンダー同期その1(アラート同期)iPhoneのカレンダー同期その2(繰り返し予定)につづき、iPhoneのカレンダー同期ネタ3回目、これで最後です。

前回はこちら

iPhoneのカレンダー同期その1(アラート同期)

iPhoneのカレンダー同期その2(繰り返し予定)

 

Google Calendarとの同期方式はExchange(ActiveSync)とGMail(CalDAV)の2種がありますが、この2種の同期方式の比較です。

 

Exchange(ActiveSync)

  • プッシュ同期可能(Google Calendar側の更新が即時にiPhoneに反映されます。)
  • カレンダーの色は同期されない。(iOSがかってに色を割り当てる)
  • アラームは1件しか同期されない。(しかも、iOS側で修正を行うと、Google Calendar側のアラーム情報が消える可能性あり。詳細は「iPhoneのカレンダー同期その1(アラート同期)」のエントリ参照ください。)
 

GMail(CalDAV)
  • プッシュ同期不可(フェッチ同期となります。iOS本体の設定で指定したフェッチ間隔でのポーリング同期となります。(標準カレンダーAppを起動すると同期されます。)。ポーリング処理のため、場合によってはバッテリーの消費に影響があるかも。)また、iOS->Google Calendar方向の同期もあまり早くないようです。
  • カレンダー色同期可能。
  • アラームは複数同期可能(ただし、SMSは同期されない。E-Mailは通常の「通知」としてiOSに反映されます。詳細は「iPhoneのカレンダー同期その1(アラート同期)」のエントリ参照ください。)
 

一長一短ですので、お好みでどちらか選択するしかないですね。

それぞれの設定手順はこちら を参照ください。

 

 

iPhoneのカレンダー同期その2(繰り返し予定)

前回の「iPhoneのカレンダー同期その1(アラート同期)」に続いて、今回は繰り返し予定関係です。

 

iOSのEventKitで、Google Calendarと同期した際、繰り返し予定の定義や修正がちゃんと機能するかについてExchange(ActiveSync)の場合とGMail(CalDAV)の場合で比較検証した結果です。

検証結果の表を書くのは、前回のポストでこりたので、トピックスだけ。(すみません。)

 

  • CalDAVでの、iOS  -> Google Calendar 方向の同期については、即時反映のはずだが、若干反映に時間がかかる(数分程度)。ちなみに、Exchangeの場合は、ほぼ、即時反映。(CalDAVで、Google Calendar->iOS方向の同期についてはiOSのフェッチ時間設定に依存)
  • CalDAVでの、iOS -> Google Calendar 方向の同期については、繰り返し予定修正(1件のみ修正/以降の全ての予定を修正のどちらも)で、タイトルを修正したり、削除した場合、修正/削除がGoogle Calendarに反映されないケースがある。(先に述べた通り、CalDAVの場合、同期に若干時間がかかるようだが、同期が反映される前に次の修正/削除処理を行なうと、前の反映処理の取りこぼしが発生してしまうように見受けられる。)
  • CalDAV,Exchangeに限らず、複数曜日(週あたり)指定や、複数日(月あたり)指定を伴う繰り返し予定に対し、予定の情報(タイトルなど)の修正を行い、「以降の全ての予定に反映」を行なうと、複数曜日指定や、複数日指定が解除されます。つまり、繰り返しパターンが変わってしまいます。(iOS標準のカレンダーAppや、他のiOSカレンダーと同期するAppでも同様)。内部的には、RRULEのBYDAYやBYMONTHDAYフラグが消えます。(EventKitの不具合っぽい)
 

繰り返し予定については、まだまだ、落とし穴が潜んでいそうです。引き続き検証続けます。

なんにせよ、上記を踏まえ、アプリとしてどう実装するか?非常に悩ましいところです。(現状は特にアプリ側で制限はしてません。)

続きはこちら

「iPhoneのカレンダー同期その3(ExchangeとCalDAV比較)」

 

iPhoneのカレンダー同期その1(アラート同期)

カレンダーアプリを開発してるので、まずは、そのあたりのネタを。

iPhoneのカレンダー同期について、何回かにわけて投稿します。第一回目は、アラート同期についてです。

 

iPhoneは、GoogleCalendar(Exchange(ActiveSync)、もしくはCalDAV経由)や、iCloudカレンダー等、外部のカレンダーと同期しますが、アラートの方法は外部のカレンダーによって様々な種類があります。カレンダー同期を行なった際に、これらのアラート情報がどのように同期されるか検証しました。(主としてGoogle Calendarを対象に検証)

確認ポイントとしては、

  • 複数アラートの扱い
  • E-MailやSMSのアラートはどうなる?
  • Google CalendarはExchange(ActiveSync)とGMail(CalDAV)の複数同期メソッドを持っているが、選択メソッドによって違いはでるか?
このあたりを中心に見て行きます。(基本的に、iOS5.0で確認、一部問題があった箇所についてはiOS5.1で追加確認してます。)

 

サポートするアラートアクションと複数アラートの指定可否

カレンダーアプリ種別



Google Calendarの「Pop-Up」= iCloudやカレンダーAppの「通知」のようです。

 

プロトコル/フレームワーク種別



アクションについては、呼び名が異なるのでわかりにくいですが、少なくともiOS(EventKit)では、Alarm(通知)一種類です。また、アラートとの指定可能数もそれぞれ異なります。

 

iOS(EventKit)からの同期処理

まずは、iOS(EventKit)からAlarmを指定した場合の挙動を見てみます。



Exchange(ActiveSync)経由の場合、アラートは1つしか同期されず(複数指定しても1つしか反映されない)、しかもiOS5.0環境では新規予定に複数アラートを指定するとフリーズします。(iOS5.1で修正されたようです。)

また、ここで見る限り、iOSの通知=GoogleCalendarのPop-Up です。(想像通りですが。)

 

外部カレンダーからiOSへの同期処理

次は、逆方向、外部カレンダーから、iOSへの同期処理のケースです。



以上から、以下が読み取れます。
  • Exchangeの場合、通知は1件しか同期されない
  • Exchangeの場合、Google CalendarのE-MailやSMSはiOSの通知に反映されない。
  • CalDAVの場合、Google CalendarのE-Mailは、通常のiOSの「通知」として反映される。
  • CalDAVの場合、Google CalendarのSMSは、iOSの通知に反映されない。
 

上記の通り、アラート内容は、その内容と同期プロトコル種別によって変換してiOSされてしまいますが、では、この変換されたものをiOS側で修正/更新したらどうなるか?

処理前状態を用意し、iOS(EventKit)から各種同期方式で、予定の更新処理を行なった際に、どのような振る舞いとなるか検証しました。

 

iOS(EventKit)からGoogleCalendar (CalDAV経由) への同期処理の場合



通知を追加することで、iOS側で「通知」と表示されていたE-Mailや、iOS側に表示されていないSMSが上書きされるのでは?との予想に反し、もとのアクション情報(E-MailやSMS)は維持されます(水色部分)。ただし、元E-Mailであったエントリ(iOS側で「通知」となっているエントリ)そのものを修正(時間変更)した場合には、アクションがPop-Upに変換されてしまいました(ピンク部分)。

 

iOS(EventKit)からGoogleCalendar (Exchange経由) への同期処理の場合



Exchange経由の場合は、通知を1件追加すると、Google Calendar側には通知が1件しか予定が反映されず、かつ既存の通知を上書きしてしまう結果となりました。(ピンク個所)

 

まとめると、、、、

Google Calendar 同期(Exchange経由)の場合は、
  • 通知は1件しか同期されない
  • E-Mail,SMSは同期されない
  • iOS側で通知を追加修正するとE-Mail,SMSの通知が消える。(元々ある複数のエントリが消える)
Google Calendar 同期(CalDAV経由)の場合は、
  • 複数通知の同期可能
  • ただし、SMSは同期されない
  • E-MailはiOSでは通常の「通知」として同期される。
  • (元E-Mailの)iOS側の通知を修正すると、E-MailがPop-Upになってしまう。
 

ということで、Exchange経由のアラート同期はボロボロ、CalDAVの方が若干マシといったところでしょうか。

 

ちなみに、近々リリース予定の.Sched3では、上記を踏まえ以下の仕様としています。(いずれ見直すかもしれません。)
  • Exchangeの場合は、通知指定は1件のみ
  • Exchangeの場合は、通知の修正は不可
  • CalDAVの場合は、既存の通知の修正は不可(追加/削除は可)
 

※検証結果が異なる等の情報があれば、お知らせください。

 

続きはこちら

「iPhoneのカレンダー同期その2(繰り返し予定)」

「iPhoneのカレンダー同期その3(ExchangeとCalDAV比較)」