2013年6月15日土曜日

【Unity】Intentを使ってTwitterにつぶやく方法。 for Android

Unityで遊びながら簡単なAndroidアプリ作ってます。
Tweet機能をつけるために調べたことをメモ。

なんか便利なプラグインがあるみたいですけど
つぶやくときに認証が必要(OAuthっていうの?)だったりするんですよね。
あれ嫌いなんです…いちユーザーとして使うのがめんどくさい。

前のアプリでIntentを使ってつぶやけるようにしたので
それをUnityでもできるようにしました。

iOSとかはこんなことする必要なくてメソッド1つ呼ぶだけでいいみたいなんですけどね・・・
Androidメンドクサス

やりたいこと

前作ったアプリ(Eclipse+Java)では下記のような書き方をしていました。

//Activityクラス内に記述
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT,"つぶやく内容");
intent.setType("text/plain");
this.startActivity(intent);

Tweetボタンを押すと、アプリ選択が出て、つぶやける。
こんな感じ。
これと同じことをUnityでやりたかった。

方法

Tweet用クラスの用意

・Create->C#Script
・Twitterとか適当に名前つける。
スクリプト追加
中身はこんな感じ。

using UnityEngine;

public static class Twitter
{

#if UNITY_ANDROID
    private static AndroidJavaObject unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    private static AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");

    private static void tweet(string text)
    {
        AndroidJavaObject intent = new AndroidJavaObject("android.content.Intent", "android.intent.action.SEND");
        intent.Call<AndroidJavaObject>("putExtra", new object[] { "android.intent.extra.TEXT", text });
        intent.Call<AndroidJavaObject>("setType", "text/plain");
        currentActivity.Call("startActivity", intent);
        intent.Dispose();
    }
#else
    static void tweet(string text) {
        throw new System.NotImplementedException();
    }
#endif

    public static void Tweet(string text)
    {
        tweet(text);
    }
}

  • どこからでも呼び出せるTweetメソッドを用意。
  • ANDROIDの場合のみIntentを使った処理。
  • JavaクラスはAndroidJavaObjectっていうのを使うと利用できるみたいです。
  • 文字列定数はここみて書き換えました。
  • このScriptはGameObjectに紐づけないのでMonoBehaviourの継承は外しました。
Androidじゃない場合の処理は調べてないので例外投げてます。
※C#の例外なげるとUnityどうなるかは知りません。

呼び出し用スクリプト

適当なボタン置いて押されたらTweetできるようにしてみた。
・空のGameObject追加
・C#スクリプト追加
・GameObjectにスクリプト適用
ボタン用スクリプト追加
中身
using UnityEngine;

public class TweetButton : MonoBehaviour
{
    void OnGUI()
    {
        if (GUI.Button(new Rect(10, 10, 200, 200), "Tweet"))
        {
            Twitter.Tweet("つぶやきシロー元気かな");
        }
    }
}

実行

でけたー。


参考サイト

Unity系記事まとめ

スポンサーリンク

Related Posts Plugin for WordPress, Blogger...