galapagosit’s blog

本家 > http://galapagosit.com/

twitter連携

ios

http://youngforever.hatenablog.com/entry/2014/05/31/150452

上記を参考に実装

android

twitter4jによるツイート実装もあるが、認証が面倒でツイートしてくれなそうなので
シンプルに公式アプリに対してIntentを送る事にした。 (公式アプリを探す処理が入ってるので若干長い)

public class TwitterTool {
    public static int REQUEST_CODE = 777;
    public static void share(String paramsString) {
        // パラメータをjson文字列形式で貰ってる
        Log.d("TwitterTool", "paramsString:" + paramsString);
        Map<String, String> params = JSON.decode(paramsString);

        AppActivity activity = (AppActivity) AppActivity.getContext();
        
        Intent tweetIntent = new Intent(Intent.ACTION_SEND);
        tweetIntent.putExtra(Intent.EXTRA_TEXT, params.get("text"));
        //tweetIntent.setType("text/plain");
        
        // resフォルダ内の画像ファイルも追加する
        tweetIntent.setType("image/*");
        String fileName = "android.resource://" + activity.getPackageName() + "/" + R.raw.twitter_share;
        Uri uri = Uri.parse(fileName);
        tweetIntent.putExtra(Intent.EXTRA_STREAM, uri);
        
        // twitter公式アプリのみを探す処理
        PackageManager packManager = activity.getPackageManager();
        List<ResolveInfo> resolvedInfoList = packManager.queryIntentActivities(tweetIntent,  PackageManager.MATCH_DEFAULT_ONLY);

        boolean resolved = false;
        for(ResolveInfo resolveInfo: resolvedInfoList){
            if(resolveInfo.activityInfo.packageName.startsWith("com.twitter.android")){
                tweetIntent.setClassName(
                    resolveInfo.activityInfo.packageName, 
                    resolveInfo.activityInfo.name );
                resolved = true;
                break;
            }
        }
        if(resolved){
            activity.startActivityForResult(tweetIntent, REQUEST_CODE);
        }else{
            Toast.makeText(activity, "最新のtwitter公式アプリが必要です", Toast.LENGTH_LONG).show();
        }
    }
    
    public static void successCallback() {
        // ここでツイート成功処理
    }
}

MainActivity

   @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode == TwitterTool.REQUEST_CODE){
            Log.d("AppActivity", "onActivityResult get twitter requestCode resultCode:" + resultCode);
            // ツイート成功は-1っぽい
            if(resultCode == -1){
                TwitterTool.successCallback();
            }
        }

    }