ゲームを実機で複数人で確認したいときにはGoogle Driveで共有している.
ただ、ビルドのたびにDriveにアップロードするのが面倒なので PostProcessBuild
とUnityGoogleDriveを使用してアップロードを自動化する.
#環境
windows10
Unity 2018.2.18f
.Net 4.x
Google Drive APIの設定
設定の流れはUnityGoogleDriveのREADMEの通りにやればOK
-
release pageから最新版をダウンロード & Unityにインポート
-
Edit/Project/Settings/Google Drive Settings
という項目ができているのでそれを開く
-
Google Drive APIを登録するプロジェクトを選択(無い場合は作る)
(Google APIを設定したアカウントと保存するDriveのアカウントは違ってもいい)
これでGoogle Drive APIを使用する準備は完了.
あとはブラウザでOAuthの権限を承認すればOKなのだが,
Unityのビルド後に呼ばれるPostProcessBuild
で動作する関数上でOAuth認証待ちをする(Coroutineを実行する)ができないっぽいので,一度認証用にPlay
してトークンを発行してからビルドするようにしてください.(単に自分がよくわかっていないので改善方があればおしえてくだしあ)
認証
File/New Scene
でScene作成 以下コードを追加して実行する
[gist]
(https://gist.github.com/OhkuboSGMS/5d05f3abd5f959316e29ac408eec58d5)
using System.Collections;
public class UploadTest : UnityEngine.MonoBehaviour
{
private void Start()
{
StartCoroutine(Upload());
}
IEnumerator Upload()
{
var data = new UnityGoogleDrive.Data.File
{Name = "Test.txt", Content = System.Text.Encoding.UTF8.GetBytes("Hello Google Drive ")};
var req = UnityGoogleDrive.GoogleDriveFiles.Create(data);
print("Start Test Upload");
yield return req.Send();
print("Finish Test Upload");
}
}
実行するとブラウザでOAuthの認証画面が出るのでDriveで保存するアカウント選んで認証する
![2019-01-13 02_31_41-ログイン - Google アカウント.png]
(https://qiita-image-store.s3.amazonaws.com/0/150338/522e265e-dd3f-1eb0-fb24-b481b4bbf0b4.png)
認証終了後に Driveを確認してTest.txt
がアップロードされていれば認証正しくできている
#ビルド後にアップロード
認証が取れたのでビルド後にapkをアップロードできるようにします.
以下のコードを Editor
フォルダ内に配置してください
gist
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEngine;
public class UploadAPKAfterBuildFinish
{
//このAttributeをつけた関数はBuild後に実行される
[PostProcessBuild(100)]
public static void OnAndroidBuildFinish(BuildTarget target, string pathToBuildProject)
{
if (target == BuildTarget.Android)
{
UploadApk(pathToBuildProject);
}
}
static void UploadApk(string pathToBuildProject)
{
var apkName = pathToBuildProject.Split(new[] {'/'}).Last();// apkのファイル名を取得
if (File.Exists(pathToBuildProject))
{
var apk = new UnityGoogleDrive.Data.File
{Name = apkName, Content = File.ReadAllBytes(pathToBuildProject)};
var req = UnityGoogleDrive.GoogleDriveFiles.Create(apk);
req.OnDone += response =>
{
if (req.IsError) Debug.LogError(req.Error);
if (req.IsDone)
{
Debug.Log("Upload Success! See your Google Drive");
Debug.Log(response.WebViewLink);
if(!string.IsNullOrEmpty(response.WebViewLink))
Application.OpenURL(req.ResponseData.WebViewLink);
}
};
req.Send();//upload
}
else
{
Debug.Log($"Built File Path:{pathToBuildProject} File Not Exists");
}
}
}
あとはビルドするだけ!
ビルド後に Driveに.apkがアップロードされている
参考記事