Unityで画像付きツイートを行いましょう。
iOSとAndroidについては、SocialConnectorを使っちゃえということで、Windows版をどうするかです。
Let's Tweet in Unityを使うのが簡単そうだったのですが、画像付きのツイートが出来ないので、情報を探していたらこちらのサイトにヒットしました。
タイトルがあちらのサイトのまんまなのですが、あちらのサイトの情報では不完全だったので、補足する意味であえて同じタイトルにしました。
さて、あちらのサイトの回答欄に、画像付きツイート用メソッドが書かれているので、そのままコピペして使えば良いのですが、実行してみると回答に書かれているとおり、「UriFormatException:Uri is longer than the maximum {0} characters.」というエラーが出ます。
さらにその解決法として「画像をjpgからpngに変えたらいけた」という書き込みがあるのですが、その解決方法は間違っており、この記事はその修正となります。
エラーの内容的には、Uri.EscapeDataStringに渡した文字列が長すぎるのが原因です。
画像をjpgからpngに変えて上手くいったのは、たまたまファイルサイズが小さくなって、文字列長が最大値に収まったからでしょう。
当然pngでもサイズが増えれば同じエラーが出ると思います。
エラーの場所はTwitter.csのUrlEncode(string value)内にあります。
value = Uri.EscapeDataString(value);
なんですが、このメソッドが32766文字までしか変換ができません。
そこで、渡された文字列が32766文字以上だった場合は、文字列を分割しながら変換をかけてやることにします。
#if false
value = Uri.EscapeDataString(value);
#else
var result = "";
int len;
while ((len = value.Length) != 0)
{
var nowLen = (value.Length > 32766) ? 32766 : value.Length;
result += Uri.EscapeDataString(value.Substring(0, nowLen));
value = value.Substring(nowLen);
}
value = result;
#endif
ちなみにEscapeDataStringは.NETの4.0以降と以前で挙動が変わる場合があります。
よって、その下にあるエスケープ処理も念のため残しておきます。
詳しくはこちらのサイトにて。
これで晴れてWindowsでも画像付きツイートが行えるようになりました。
MacやLinux上では動くのかな?(5月6日追記:Mac上でも正常に動作しました)
機会があれば試してみたいと思います。
あちらのサイトに書き込みが行えれば良かったのですが、わざわざこのために向こうのサイトにユーザー登録するのも面倒なので、こちらに書きました。
すみません。
というか、アセット作者が対応してくれれば良いのになぁ。