【Androidアプリ】iCalSyncを1.4.2にアップデートしました!

モバイルアプリサービス部の浜田です!

2018年10月30日、入社後の初仕事としてAndroidアプリ「iCalSync」を1.4.2にアップデートしました!

iCalSyncはiCalendar形式(.ical)のファイルをAndroidのカレンダーに同期するアプリです。以下の記事のように活用できます。

iPhone/Androidに2014年W杯ブラジル大会の放送スケジュールを取り込む方法 | DevelopersIO

新機能はなく心苦しいのですが、アップデート後の注意点などを記載します。

アクセス許可の確認

iCalSyncは以下のデータへのアクセスを必要とします。

  • 連絡先
  • カレンダー

今回のアップデートにより、Androidのバージョン6.0以降の端末でiCalSyncを使用される際、次のようなダイアログを表示して、アクセス許可を求める場合があります。

アクセス許可のダイアログ

iCalSyncは指定されたiCalendar形式のファイルと同期するカレンダーの作成や、そのカレンダーへのアクセスのみ行います。それ以外の連絡先やカレンダーのデータにはアクセスしないため、安心して許可を選択してください。

この対応のために「PermissionsDispatcher」というライブラリを使用しました。便利なライブラリなので、まだ使ったことがない方はぜひ試してみてください!

カレンダー作成時のURLの形式チェック

以前のバージョンでは、URLの形式が正しくない状態でカレンダーを作成した際、同期が開始されたタイミングでアプリが異常終了する問題がありました。

今回のアップデートにより、URLの形式が正しくない場合は次のようなアラートが表示されます(スクリーンショットの場合はiを入力すべき箇所に|を入力してしまっている)。アラートが表示されたら、入力に間違いがないか確認し、修正してください。

URLの形式が正しくない場合のアラート表示

自動更新間隔の精度変更

更新間隔の設定に使用しているAPIContentResolver.addPeriodicSync(Account, String, Bundle, long)ドキュメントに記載されているとおり、APIレベル24(Android 7.0)で更新間隔の最小単位が15分に変更になりました。

how frequently the sync should be performed, in seconds. On Android API level 24 and above, a minmam interval of 15 minutes is enforced.

この仕様変更を想定していなかったため、Androidのバージョン7.0以降の端末で、自動更新間隔に1分を設定したカレンダーを作成した場合、次のような処理の流れでnullと表示されてしまう問題がありました。

  1. iCalSyncはAndroid OSに1分間隔での更新を要求
  2. 前述の仕様により、Android OSが実際には15分を設定
  3. iCalSyncは15分の設定値を想定していないため代わりにnullを表示

更新間隔を1分に設定したときにnullで表示される問題の解説図

今回のアップデートにより、OSによって実際に設定された「15分」が表示されるように修正されました。

更新間隔を1分に設定したときに15分に丸め込まれる問題の解説図

アップデート後も、iCalSyncを使用している端末のAndroidのバージョンによって、自動更新間隔の精度が異なります。ご容赦のほど、よろしくおねがいします。

  • Android 7.0未満: カレンダーの作成画面で選択可能な自動更新間隔がそのまま設定される
  • Android 7.0以上: 「1分」、「5分」については、「15分」の設定に強制的に変更される

参考: android - ContentResolver.addPeriodicSync interval round up - Stack Overflow

サポートOSの変更

今回のアップデートでAndroid 4.1未満の端末についてはサポート外としました。

さいごに

インターネット上で公開されているiCalendar形式(.ical)の同期にお困りの方は、ぜひ「iCalSync」をお使いください!

iCalSyncの関連記事