おもちゃラボ

Unityで遊びを作ってます

【Unity】Social ConnectorでTwitterにスクショを投稿する

UnityでTwitterやFacebook、InstagramなどのSNSに画像を投稿する機能を追加するにはSocial Connectorを使うのが便利です。2018年5月現在、Androidをターゲットにするとうまく動かないポイントがあったので、それを含めて紹介していきたいと思います。

f:id:nn_hokuson:20180516195356j:plain

Social Connectorの入手と設定

Social Connectorは現在Asset Storeでは配布されていないようですので、次のサイトから入手して下さい。
github.com

ダウンロードできたら、SocialConnector.unitypackageをダブルクリックしてアセットをプロジェクトにインポートして下さい。Assets以下にSocialConnectorフォルダができるはずです。

f:id:nn_hokuson:20180512222321p:plain:w500

次にwrite accessの設定を行います。メニューバーからEdit→Project Settings→Playerを選択して、Player Settingsを表示して、Other Settingsのwrite accessの項目を「External(SD Card)」に設定して下さい。

f:id:nn_hokuson:20180516193500p:plain:w600

スクショを投稿するスクリプトを作成する

プロジェクトウィンドウで右クリック→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を選択するとそのアプリが起動します。

f:id:nn_hokuson:20180516194159j:plain:w320

Androidで動かない場合の対策

2018年5月現在、iPhoneでは上記の手順で問題なく動作するのですが、Androidを使用した場合、上記の手順のままではSNSの選択画面が出てきませんでした。

原因と対策も上記サイトにまとめられています。

Android API Level 24 から、画像のシェアにおいて FileProvider の使用が必須となりました。このため、プロジェクト単位で AndroidManifest.xml をカスタマイズしなければいけません。

1. Androidフォルダの移動

Assets/SocialConnector/Plugins/AndroidフォルダをAssets/Plugins/Androidフォルダーに移動(Pluginsフォルダながければ作成)してください。

f:id:nn_hokuson:20180512224248p:plain:w500

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への投稿画面が表示されるようになりました。