2014年6月2日月曜日

AndroidアプリからTwitter公式クライアントでツイートする4つの方法

今回EasyBowlingとBowlingScoreBookにSNS投稿機能をつけましたが、BowlingScoreBookでは特に「Twitterで投稿」ボタンを付けました
その時に調べたTwitterの公式クライアントを呼びだしてツイートする4つの方法です
  1. 暗黙的Intentで投稿
  2. Intent.ACTION_SENDで暗黙的Intent呼び出しによる投稿です
    ACTION_SENDと"text/plain"に反応するアプリがすべて出るので公式以外のクライアントアプリ、Twitterに関係のないアプリも出てきます
      public static void tweetFile1(Context context, String message) {
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setType("text/plain");
        intent.putExtra(Intent.EXTRA_TEXT, message);
        ((Activity)context).startActivity(intent);
      }
    
  3. 公式アプリのPackage、Classを指定して投稿
  4. PackageManagerで公式クライアントをピンポイントで呼び出します
    公式以外のクライアントアプリ以外は反応しません
    公式の投稿用Activityが変わった場合には修正が必要となります(過去2回程変更されている)
      public static void tweetFile2(Context context, String message) {
        String twitterClass = "com.twitter.android.composer.TextFirstComposerActivity";
        try {
          Intent intent = new Intent();
          intent.setAction(Intent.ACTION_SEND);
          intent.setType("text/plain");
          intent.putExtra(Intent.EXTRA_TEXT, message);
          intent.setClassName("com.twitter.android", twitterClass);
          ((Activity)context).startActivity(intent);
        } catch (PackageManager.NameNotFoundException e) {
          //Toast("Not found com.twitter.android")
        }
      }
    
  5. URIスキームを指定して投稿
  6. WEBページからアプリを呼び出すのに使用するURIスキームを利用して呼び出します
    公式以外でも"twitter://"のスキームに対応しているアプリが呼び出されます
      public static void tweetFile3(Context context, String message) {
        String url = "twitter://post?message=" + message;
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setType("text/plain");
        intent.setData(Uri.parse(url));
        ((Activity)context).startActivity(intent);
      }
    
  7. URL(http://twitter.com/)を利用して投稿
  8. 公式クライアントかWEBブラウザが呼び出されます ブラウザの場合、"http://twitter.com/"の投稿画面が呼び出されます
      public static void tweetFile4(Context context, String message) {
        String url = "http://twitter.com/share?text=" + message;
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        intent.setType("text/plain");
        intent.setData(Uri.parse(url));
        ((Activity)context).startActivity(intent);
      }
    
このように色々と投稿方法がありますが、どれを採用すべきかは状況によるかと思います
以下に各手法の特徴をまとめてみました
投稿方法互換
クライ
アント
画像
投稿
備 考
1.暗黙的IntentTwitter関連アプリ以外もでる
2.Package指定×公式Twitterクライアントのみでる
3.URIスキーム指定×互換クライアントはスキーム対応アプリのみ
4.URL(HTTP)指定××公式クライアントがなくてもブラウザで投稿できる
※2014/06/02現在

0 件のコメント:

コメントを投稿