LCP のクリップボードアクションでコールバックが重くなる時の対処法

photo credit: DaveCrosby via photopin cc
photo credit: DaveCrosby via photopin cc

iPhone のランチャーアプリ Launch Center Pro は外部アプリから呼び出せる URL スキームが豊富で便利なのですが、1つ難点があります。クリップボードアクションの実行時、コールバックに極端に時間がかかることです。この問題に関して対処法を見つけたので紹介します。

目次

  1. クリップボードアクション
  2. コールバック処理に約10秒
  3. iOS 7 で処理が重くなる
  4. 解決策

クリップボードアクション

書式は次の通りです。

  • launch://clipboard?text=テキスト
  • launch://x-callback-url/clipboard?text=テキスト&x-success=コールバック先URL

1つ目は「任意のテキストをクリップボードにコピー」、2つ目は「任意のテキストをクリップボードにコピーした後、指定した URL を開く」です。

コールバック処理に約10秒

例として、"hello world" をコピーして Drafts に移動する URL スキームを考えてみます。

launch://x-callback-url/clipboard?text=hello%20world&x-success=drafts%3A

このスキームを LCP にアイテムとして登録し、実行すると瞬時に処理されます。それでは Safari や Drafts など、LCP の外部から実行するとどうなるか。処理に10秒ほどかかります。

iOS 7 で処理が重くなる

補足すると、iOS 6 の時点ではスキームの書式こそ若干違ったものの、外部からの呼び出しでもアクション自体はスムーズに処理されました。それが iOS 7 では重くなったのです。

関係ありそうなことを指摘しているのが次の記事。実際にこの点が原因なのか、なぜこんな状態が続いているのかは自分には判断できません。ひとまず LCP の開発元に報告したので、対応を待ちたいと思います。

解決策

現時点で、iOS 7 の LCP で外部からのクリップボードアクションは事実上使えない。そう思い込んでいたのですが、ユーザレベルでできる解決策はありました。実行したいスキームを launch://?url= で包み込めばよかったのです。

launch://?url={{launch://x-callback-url/clipboard?text=hello%20world&x-success=drafts%3A}}

{{}} の中は URL エンコードされているととらえてください。自力でエンコードすると次のように。

launch://?url=launch%3A%2F%2Fx-callback-url%2Fclipboard%3Ftext%3Dhello%2520world%26x-success%3Ddrafts%253A

LCP の URL スキームを2重にセットすることで、外部からの呼び出しでありながら、最初から LCP 内部で実行したように振る舞います。これなら iOS 7 で外部アプリから実行しても、待たされることなくコールバックまで一気に処理されます。

LCP のクリップボードアクションを有効活用したい人はぜひ試してみてください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です