LoginSignup
5
8

More than 5 years have passed since last update.

UnityのLet's Tweet in Unityを用いた画像ツイート

Last updated at Posted at 2017-05-03

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上でも正常に動作しました)
機会があれば試してみたいと思います。

あちらのサイトに書き込みが行えれば良かったのですが、わざわざこのために向こうのサイトにユーザー登録するのも面倒なので、こちらに書きました。
すみません。
というか、アセット作者が対応してくれれば良いのになぁ。

5
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
8