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の継承は外しました。
※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系記事まとめ