UnityでTwitterやFacebook、InstagramなどのSNSに画像を投稿する機能を追加するにはSocial Connectorを使うのが便利です。2018年5月現在、Androidをターゲットにするとうまく動かないポイントがあったので、それを含めて紹介していきたいと思います。
Social Connectorの入手と設定
Social Connectorは現在Asset Storeでは配布されていないようですので、次のサイトから入手して下さい。
github.com
ダウンロードできたら、SocialConnector.unitypackageをダブルクリックしてアセットをプロジェクトにインポートして下さい。Assets以下にSocialConnectorフォルダができるはずです。
次にwrite accessの設定を行います。メニューバーからEdit→Project Settings→Playerを選択して、Player Settingsを表示して、Other Settingsのwrite accessの項目を「External(SD Card)」に設定して下さい。
スクショを投稿するスクリプトを作成する
プロジェクトウィンドウで右クリック→Create→C# Script
を選択し、ShareControllerという名前で保存します。保存できたら次のスクリプトを入力して下さい。
using UnityEngine; using System.IO; using System.Collections; using SocialConnector; using UnityEngine.UI; public class ShareController : MonoBehaviour { public void Share() { StartCoroutine(_Share()); } public IEnumerator _Share() { string imgPath = Application.persistentDataPath + "/image.png"; // 前回のデータを削除 File.Delete(imgPath); //スクリーンショットを撮影 ScreenCapture.CaptureScreenshot("image.png"); // 撮影画像の保存が完了するまで待機 while (true) { if (File.Exists(imgPath)) break; yield return null; } // 投稿する string tweetText = ""; string tweetURL = ""; SocialConnector.Share(tweetText, tweetURL, imgPath); } }
_Shareコルーチンの中でスクリーンショットの撮影と、SNSへの投稿を行っています。Unityでスクリーンショットを撮影するにはScreenCapture.CaptureScreenshotを使います。以前まではApplication.CaptureScreenshotでしたが、いつの間にか変わったようですね(^^;)
ただ、CaptureScreenshotの機能は変わっていません。相変わらず、スクリーンショットの保存が完了した時にコールバックを返してもらえないので、撮影画像の保存が完了するまで待つループを差し込んでいます。適当に数秒待つのは危険なので止めておきましょう。
最後に SocialConnectorクラスのShareメソッドを使ってSNSへの投稿画面を表示をしています。Shareを実行すると次のようにSNSの選択画面が表示され、投稿したいSNSを選択するとそのアプリが起動します。
Androidで動かない場合の対策
2018年5月現在、iPhoneでは上記の手順で問題なく動作するのですが、Androidを使用した場合、上記の手順のままではSNSの選択画面が出てきませんでした。
原因と対策も上記サイトにまとめられています。
Android API Level 24 から、画像のシェアにおいて FileProvider の使用が必須となりました。このため、プロジェクト単位で AndroidManifest.xml をカスタマイズしなければいけません。
1. Androidフォルダの移動
Assets/SocialConnector/Plugins/AndroidフォルダをAssets/Plugins/Androidフォルダーに移動(Pluginsフォルダながければ作成)してください。
2. AndroidManifest.xmlの編集
次に、Assets/Plugins/Android/AndroidManifest.xml内のcom.kyusyukeigo.socialconnector.fileproviderのxxx.xxx.xxx.fileproviderの「x」の部分を自分のパッケージ名に書き換えてください。パッケージ名は、Player SettingsのIdentificationやApplication.identifierで確認できます。
上の2つの手順を行うことで、AndroidでもSNSへの投稿画面が表示されるようになりました。