Androidでシェア機能を作ろうとした場合、、、
- Intentで全部自分で実装する
- ShareCompat を使って実装
- 外部の専用ライブラリを使う
主にこの3つの方法があります。
手軽で簡単なのが ShareCompat を使うこと
使い方も簡単だったので、
ここでは ShareCompat によるシェア機能の実装手順 まとめました。
アプリの宣伝・インストール数底上げにも役立ちそうです。
このページの目次
この ShareCompat は以下のような機能
▼ Android developers から引用
Extra helper functionality for sharing data between activities. ShareCompat provides functionality to extend the ACTION_SEND/ ACTION_SEND_MULTIPLE protocol and support retrieving more info about the activity that invoked a social sharing action.
▼ この説明の超適当な意訳
アクティビティ間でデータを共有するためのヘルパー機能。ShareCompat は従来の ACTION_SEND/ ACTION_SEND_MULTIPLE を拡張し、SNSでのシェアアクションを呼び出したアクティビティに関する詳細情報の取得をサポートします。
もちろん共有アクティビティは "これなし" でも呼び出し可能
でも楽したいなら コッチを使う方がいいですね。
あとこれを使うにあたり、特別な準備もありません。
もちろん build.gradle とかの編集も不要です。(多分)
基本的なSNSシェア機能の実装手順&コード例
では早速これを使って、シェア機能を付けることに。
開発アプリでは次の用途で使いたかったです。
- 自分のアプリを宣伝するため
- 外部のSNSアプリを起動するため
少しでもアプリインストール数は伸ばしたいですよね。
そのために使ってみようって感じです。
とあるアプリに実装してみた手順は以下の通り
まず共有アプリ一覧を呼び出すメソッド定義してみました。
▼ こういうの
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/// このアプリをSNSシェアできるIntentを起動する private void openChooserToShareThisApp() { ShareCompat.IntentBuilder builder = ShareCompat.IntentBuilder.from(MainActivity.this); String subject = "サブジェクト"; String bodyText = "アプリ名とかストアページURLとか..."; builder.setSubject(subject) /// 件名 .setText(bodyText) /// 本文 .setType("text/plain"); Intent intent = builder.createChooserIntent(); /// 結果を受け取らずに起動 builder.startChooser(); } |
大事なポイントは次の2つ
- 件名の設定
上コードの setSubject(subject) の部分。メールなら件名に表示されるが、Twitterとかだとあんまり意味ないらしい・・・
- 本文の設定
上コードの setText(bodyText) の部分。メールでいう本文、Twitterなら日本語のみで140文字まで可能( 関連記事 => ツイート文字数とバイト数の関係 )
普通にシェアしてもらうだけなら、これでも十分です。
あとはメニュー項目なりがタッチされたときに起動させればOKです。
どういう動作とか見た目かについてですが・・・
ShareCompat が起動すると、こういうメニューが表示されます。
▼ Android7.0での見た目
▼ その中から Twitter をタッチしてみた
本文に設定したものが最初からツイート欄にセットされてます。
これを Intent だけでやろうとすると大変なんですよね・・・
こういう便利なライブラリは使わない手はありません。
シェア後の結果を startActivityForResult で受け取る
もしSNSシェア(共有)するだけではなく、、、
- シェア後に何かトースト表示したい
- 本当にシェアされたか知りたい
こういう場合は onActivityResult で受け取ることも可能です。
そのやり方では以下の通り
1.先ほどのシェアコードを少しだけ書き変え
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
/// このアプリをSNSシェアできるIntentを起動する private void openChooserToShareThisApp() { ShareCompat.IntentBuilder builder = ShareCompat.IntentBuilder.from(MainActivity.this); String subject = "サブジェクト"; String bodyText = "アプリ名とかストアページURLとか..."; builder.setSubject(subject) /// 件名 .setText(bodyText) /// 本文 .setType("text/plain"); Intent intent = builder.createChooserIntent(); /// 結果を受け取るように起動 if (intent.resolveActivity(getPackageManager()) != null) { startActivityForResult(intent, REQUESTCODE_SNS_SHARE); } } |
2.onActivityResult をオーバーライド
1 2 3 4 5 6 7 8 9 10 11 12 |
/// リクエストコードを定義 private static final int REQUESTCODE_SNS_SHARE = 1; @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUESTCODE_SNS_SHARE) { if (resultCode == RESULT_OK) { /// シェアしてくれた人に特典付与したり、 /// お礼のメッセージを表示したり、、、 } } } |
こうすればSNSシェア後に何かすることが可能
このテクニック(?)はAndroid開発では意外とよく使います。
ここまでのまとめ
シェア機能だったら Intent だけでも実装できるものの・・・
やっぱり ShareCompat の方が労力かからないし楽ですね。
あと変なバグ・エラーが入るリスクも最小限にできます。
以上、ShareCompat でシェア機能をAndroidアプリに付ける方法でした。