2014年4月5日土曜日

[Android] アプリからツイートするとハッシュタグが消える(URLエンコード漏れ)

The reason why tags disappear from URL
Androidアプリからツイッターに投稿する(ツイートする)方法は色々あると思いますが、一番簡単なやり方は次のようなURL文字列をIntentに渡す方法かとおもいます。

https://twitter.com/intent/tweet?text=ツイートしたい内容
※あまりいい例ではありません

サンプルとして、起動するとツイートの投稿画面を表示するソースは次のようになります。
開発環境は次の通りです。
・64bit版 Windows8
・32bit版 Eclipse3.7 (Windows XPモードで使用)
・Android-SDK r22.6.1

アクティビティ(MainActivity.java)


特別な権限は不要なのでマニフェスト(AndroidManifest.xml)は省略します。
Target SDK Version が4以上の設定でビルドできます。
Android1.6以降で動作します。

これを起動するとブラウザーなりツイッター用アプリが起動します。

ところでツイッターにはハッシュタグという機能があります。
#(半角シャープ)の後に続いた文字列はハッシュタグとされ、タップするだけで同じハッシュタグを簡単に検索できます。
ただし、次のようなURL文字列をIntentに渡すとハッシュタグが消えてしまいます。

https://twitter.com/intent/tweet?text=ツイートしたい内容 #fujiu_jp



実行しても「#」より後ろの文字はすべて消えてしまいます。

#(半角シャープ)を含む文字列はURLとして特殊な意味を持つためです。
#(半角シャープ)を「%23」に置き換えるとハッシュタグ付きのツイートが出来るようになります。
https://twitter.com/intent/tweet?text=ツイートしたい内容 %23fujiu.jp

他にも&(半角アンパサンド)や=(半角イコール)のように特殊な意味を持つ記号はるので一つずつ置き換えるのは手間がかかります。
そもそもURLに含めるパラメーターはURL用にエンコードするべきです。
上の例で「いい例ではない」と書いたのはURLにエンコードしてない文字列を含めたためです。
ツイートしたい文字をUriクラスのencodeメソッドを使えばエンコードされるので安全です。


これで特殊な意味を持つ文字を入力しても正常にツイートできるようになります。
ツイッターへの投稿に限らずURLのパラメーターはのURLエンコードすることをお勧めします。

ツイッターに投稿できるAndroidアプリ ザ・数唱 / Digit span PLAY を公開しました。

以上、参考になれば幸いです。

0 件のコメント:

コメントを投稿