当サイトの運営者です。ゲーム制作とプラグイン開発が好きで、コミュニティに貢献したいと考えています。
RPGツクールMZでゲームを制作中です。
※プログラマ・エンジニアではありません。
Google Analytics を利用したアクセス解析 - BITO_Game_Analytics.js
シェア用テキスト:
▼Google Analytics を利用したアクセス解析(BIT/O様作) - BITO_Game_Analytics.js
https://plugin.fungamemake.com/archives/18928
Google Analytics を使ってゲームのアクセス解析を行うことができます。
ふりがな:Google Analytics をりようしたあくせすかいせき
機能概要: Google Analytics を使ってゲームのアクセス解析を行うことができます。
利用規約(ライセンス): MITライセンス
作者:BIT/O
作者サイト:https://x.com/BITORCHARD
直接ダウンロード:Zipファイルファイル名:BITO_Game_Analytics.js
プラグインのヘルプ:
/*:
* @plugindesc Google Analytics Plugin for RPG Maker MV Games
* @author BIT/O
*
* @param トラッキングID
* @desc Googleアナリティクスアカウントを作成し”UA-00000000-1”といった文字列のトラッキングIDを入力します。
* @default UA-00000000-1
*
* @param 場所移動をトラッキング
* @desc イベント「場所移動」「ゲームオーバー」「タイトル画面に戻す」を実行した時に「ページ遷移」としてトラッキングを行います。(ON/OFF)
* @default ON
*
* @param プラグインコマンドのトラッキング
* @desc プラグインコマンドで実行されるトラッキング実施を行うか設定します。(ON/OFF)
* @default ON
*
* @param 起動直後からトラッキング
* @desc 通常は最初のマップから開始されるトラッキングを起動直後から開始します。タイトルをスキップする場合などにONにしてください。(ON/OFF)
* @default OFF
*
* @param 仮想ページタイトルに座標を追加
* @desc 仮想ページタイトルに座標を追加してトラッキング。(ON/OFF)
* (記録例: ”主人公の家(8,6)” )
* @default ON
*
* @param 仮想URLにマップ名を適用
* @desc ページトラッキング時の”URL”を、マップIDではなくマップ名を用いる。(ON/OFF)
* @default OFF
*
* @param ポリシーの掲載
* @desc タイトルメニューにプライバシーポリシーの項目を追加します。
* 掲載はアナリティクスの利用規約で定められています。(ON/OFF)
* @default ON
*
* @param ポリシーの名称
* @desc タイトルのメニュー項目の名称
* default:プライバシーポリシー
* @default プライバシーポリシー
*
* @param ポリシーの内容1
* @desc プライバシーポリシーの内容を入力します(1)。
* @default 当ゲームでは、個人を特定しない形でユーザ情報をGoogleに送信しています。当ゲームはそれらの情報を Google Analytics を使用しゲーム利用状況の把握やゲームの改善、ユーザーの傾向をコンテンツとして紹介するといった用途で利用する可能性があります。本ゲームのユーザーは本ゲームを利用することで、上記方法および目的においてGoogleとゲーム制作者が行うこうしたデータ処理に対して、許可を与えたものとみなします。Googleによる情報収集および利用方法については、Google Analyticsサービス利用規約およびGoogle社プライバシーポリシーによって定められています。
*
* @param ポリシーの内容2
* @desc プライバシーポリシーの内容を入力します(2)。
* @default Cookieについて Cookieとは、ゲーム(もしくはGoogleアナリティクスのような第三者サービス)が、ゲームユーザーが利用するデバイスのブラウザに情報を保存し、あとで取り出すことができる符号です。ただしゲーム管理者は、当ゲームで設定するCookieからユーザーの個人情報を把握することはできませんのでご安心ください。なお、ゲームユーザーはブラウザの設定によりCookieの受け取りを拒否することができます。
*
* @param ポリシーの内容3
* @desc プライバシーポリシーの内容を入力します(3)。
* @default Googleアナリティクス オプトアウトアドオン https://tools.google.com/dlpage/gaoptout
*
* @param ポリシーの改行文字数
* @desc ポリシーの文章を何文字毎で改行するかを入力します。
* default:60
* @default 60
*
* @help Google Analytics を使ってゲームのアクセス解析を行うことができます。
*
* [注意1] このプラグインはローカル環境では正常に動作しません(これは、開発時のローカル環境、また動作検証はしておりませんが、スマートフォンアプリ内でも動作しないことを意味します)。
* [注意2] このプラグインは外部接続が制限されている環境下では動作しません。
*
* 場所移動時、タイトルへ戻った時、ゲームオーバー時をページ遷移としてトラッキングします。
* マップIDと座標が仮想URL(マップIDからマップ名へ切替可)、
* (記録例: ”/1/8/6” )
* マップ名が仮想ページタイトルとして記録されます(座標表示の有無は変更可)。
* (記録例: ”主人公の家(8,6)” )
*
* またプラグインコマンドを使って
* 「ページ遷移」、「イベントアクション」を Google Analytics に送信できます。
*
* プラグイン使用の際は、Google Analytics のアカウントを作成し、
* トラッキングIDを取得が必要があります。
* (https://www.google.com/intl/ja_jp/analytics/)
*
* その際は、Google Analytics サービス利用規約
* (https://www.google.co.jp/analytics/terms/jp.html)
* およびGoogle社プライバシーポリシー
* (https://www.google.com/intl/ja/policies/privacy/)をご覧ください。
*
* なお、Google Analytics に 1か月に送信されるヒット数が
* アナリティクスの利用規約で定められている上限を超えた場合、
* その超過分のヒット数が処理される保証はありません。
* その場合は、有料サービスにアップグレードする必要があります。
*
* Google Analytics は、Google Inc. の登録商標です。
*
* プラグインコマンド:
*
* ▼ページ トラッキングの有効化・無効化
* BITO_GA_MOVE_TURN (ON/OFF)
* 例)BITO_GA_MOVE_TURN OFF
*
* ▼プラグインコマンドによるトラッキングの有効化・無効化
* BITO_GA_CND_TURN (ON/OFF)
* 例)BITO_GA_CND_TURN OFF
*
* ▼ページ トラッキングを実行
* BITO_GA_VIEW (ページ名)
* 例)BITO_GA_VIEW 1年前の回想
* 例)BITO_GA_VIEW P[1]の部屋
* 例)BITO_GA_VIEW
* ※何も指定しない場合は、マップ名を送信されます。
*
* ▼イベント トラッキングを実行
* BITO_GA_EVENT (イベントカテゴリ) (イベントアクション)
* 例)BITO_GA_EVENT 飛行船 入手
* 例)BITO_GA_EVENT 宿泊 店舗名:V[20]
* もしくは
* BITO_GA_EVENT (イベントカテゴリ) (イベントアクション) (イベントラベル)
* 例)BITO_GA_EVENT 宝箱 入手 古びた鍵
* 例)BITO_GA_EVENT モンスター 討伐完了 裏ボスA
* もしくは
* BITO_GA_EVENT (イベントカテゴリ) (イベントアクション) (イベントラベル) (正の整数)
* 例)BITO_GA_EVENT ゲーム情報 読込時間 オープニング V[5]
* 例)BITO_GA_EVENT レベル チェック N[1] V[10]
* ※負の整数はサポートされていません。
*
* 利用規約:
* 作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)
* についても制限はありません。
* このプラグインはもうあなたのものです。
*/
/*:ja
* @plugindesc Google Analytics を使ったゲームのアクセス解析
* @author BIT/O
*
* @param トラッキングID
* @desc Googleアナリティクスアカウントを作成し”UA-00000000-1”といった文字列のトラッキングIDを入力します。
* @default UA-00000000-1
*
* @param 場所移動をトラッキング
* @desc イベント「場所移動」「ゲームオーバー」「タイトル画面に戻す」を実行した時に「ページ遷移」としてトラッキングを行います。(ON/OFF)
* @default ON
*
* @param プラグインコマンドのトラッキング
* @desc プラグインコマンドで実行されるトラッキング実施を行うか設定します。(ON/OFF)
* @default ON
*
* @param 起動直後からトラッキング
* @desc 通常は最初のマップから開始されるトラッキングを起動直後から開始します。タイトルをスキップする場合などにONにしてください。(ON/OFF)
* @default OFF
*
* @param 仮想ページタイトルに座標を追加
* @desc 仮想ページタイトルに座標を追加してトラッキング。(ON/OFF)
* (記録例: ”主人公の家(8,6)” )
* @default ON
*
* @param 仮想URLにマップ名を適用
* @desc ページトラッキング時の”URL”を、マップIDではなくマップ名を用いる。(ON/OFF)
* @default OFF
*
* @param ポリシーの掲載
* @desc タイトルメニューにプライバシーポリシーの項目を追加します。
* 掲載はアナリティクスの利用規約で定められています。(ON/OFF)
* @default ON
*
* @param ポリシーの名称
* @desc タイトルのメニュー項目の名称
* default:プライバシーポリシー
* @default プライバシーポリシー
*
* @param ポリシーの内容1
* @desc プライバシーポリシーの内容を入力します(1)。
* @default 当ゲームでは、個人を特定しない形でユーザ情報をGoogleに送信しています。当ゲームはそれらの情報を Google Analytics を使用しゲーム利用状況の把握やゲームの改善、ユーザーの傾向をコンテンツとして紹介するといった用途で利用する可能性があります。本ゲームのユーザーは本ゲームを利用することで、上記方法および目的においてGoogleとゲーム制作者が行うこうしたデータ処理に対して、許可を与えたものとみなします。Googleによる情報収集および利用方法については、Google Analyticsサービス利用規約およびGoogle社プライバシーポリシーによって定められています。
*
* @param ポリシーの内容2
* @desc プライバシーポリシーの内容を入力します(2)。
* @default Cookieについて Cookieとは、ゲーム(もしくはGoogleアナリティクスのような第三者サービス)が、ゲームユーザーが利用するデバイスのブラウザに情報を保存し、あとで取り出すことができる符号です。ただしゲーム管理者は、当ゲームで設定するCookieからユーザーの個人情報を把握することはできませんのでご安心ください。なお、ゲームユーザーはブラウザの設定によりCookieの受け取りを拒否することができます。
*
* @param ポリシーの内容3
* @desc プライバシーポリシーの内容を入力します(3)。
* @default Googleアナリティクス オプトアウトアドオン https://tools.google.com/dlpage/gaoptout
*
* @param ポリシーの改行文字数
* @desc ポリシーの文章を何文字毎で改行するかを入力します。
* default:60
* @default 60
*
* @help Google Analytics を使ってゲームのアクセス解析を行うことができます。
*
* [注意1] このプラグインはローカル環境では正常に動作しません(これは、開発時のローカル環境、また動作検証はしておりませんが、スマートフォンアプリ内でも動作しないことを意味します)。
* [注意2] このプラグインは外部接続が制限されている環境下では動作しません。
*
* 場所移動時、タイトルへ戻った時、ゲームオーバー時をページ遷移としてトラッキングします。
* マップIDと座標が仮想URL(マップIDからマップ名へ切替可)、
* (記録例: ”/1/8/6” )
* マップ名が仮想ページタイトルとして記録されます(座標表示の有無は変更可)。
* (記録例: ”主人公の家(8,6)” )
*
* またプラグインコマンドを使って
* 「ページ遷移」、「イベントアクション」を Google Analytics に送信できます。
*
* プラグイン使用の際は、Google Analytics のアカウントを作成し、
* トラッキングIDを取得が必要があります。
* (https://www.google.com/intl/ja_jp/analytics/)
*
* その際は、Google Analytics サービス利用規約
* (https://www.google.co.jp/analytics/terms/jp.html)
* およびGoogle社プライバシーポリシー
* (https://www.google.com/intl/ja/policies/privacy/)をご覧ください。
*
* なお、Google Analytics に 1か月に送信されるヒット数が
* アナリティクスの利用規約で定められている上限を超えた場合、
* その超過分のヒット数が処理される保証はありません。
* その場合は、有料サービスにアップグレードする必要があります。
*
* Google Analytics は、Google Inc. の登録商標です。
*
* プラグインコマンド:
*
* ▼ページ トラッキングの有効化・無効化
* BITO_GA_MOVE_TURN (ON/OFF)
* 例)BITO_GA_MOVE_TURN OFF
*
* ▼プラグインコマンドによるトラッキングの有効化・無効化
* BITO_GA_CND_TURN (ON/OFF)
* 例)BITO_GA_CND_TURN OFF
*
* ▼ページ トラッキングを実行
* BITO_GA_VIEW (ページ名)
* 例)BITO_GA_VIEW 1年前の回想
* 例)BITO_GA_VIEW P[1]の部屋
* 例)BITO_GA_VIEW
* ※何も指定しない場合は、マップ名を送信されます。
*
* ▼イベント トラッキングを実行
* BITO_GA_EVENT (イベントカテゴリ) (イベントアクション)
* 例)BITO_GA_EVENT 飛行船 入手
* 例)BITO_GA_EVENT 宿泊 店舗名:V[20]
* もしくは
* BITO_GA_EVENT (イベントカテゴリ) (イベントアクション) (イベントラベル)
* 例)BITO_GA_EVENT 宝箱 入手 古びた鍵
* 例)BITO_GA_EVENT モンスター 討伐完了 裏ボスA
* もしくは
* BITO_GA_EVENT (イベントカテゴリ) (イベントアクション) (イベントラベル) (正の整数)
* 例)BITO_GA_EVENT ゲーム情報 読込時間 オープニング V[5]
* 例)BITO_GA_EVENT レベル チェック N[1] V[10]
* ※負の整数はサポートされていません。
*
* 利用規約:
* 作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)
* についても制限はありません。
* このプラグインはもうあなたのものです。
*/
(function() {
'use strict';
var pluginName = 'BITO_Game_Analytics';
var metaTagPrefix = 'BITO_GA';
//=============================================================================
// ローカル関数
// プラグインパラメータやプラグインコマンドパラメータの整形やチェックをします
//=============================================================================
var getParamOther = function(paramNames) {
if (!Array.isArray(paramNames)) paramNames = [paramNames];
for (var i = 0; i < paramNames.length; i++) {
var name = PluginManager.parameters(pluginName)[paramNames[i]];
if (name) return name;
}
return null;
};
var getParamString = function(paramNames) {
var value = getParamOther(paramNames);
return value === null ? '' : value;
};
var getParamBoolean = function(paramNames) {
var value = getParamOther(paramNames);
return (value || '').toUpperCase() === 'ON';
};
var getParamNumber = function(paramNames, min, max) {
var value = getParamOther(paramNames);
if (arguments.length < 2) min = -Infinity;
if (arguments.length < 3) max = Infinity;
return (parseInt(value, 10) || 0).clamp(min, max);
};
var getParamFloat = function(paramNames, min, max) {
var value = getParamOther(paramNames);
if (arguments.length < 2) min = -Infinity;
if (arguments.length < 3) max = Infinity;
return (parseFloat(value) || 0).clamp(min, max);
};
var getCommandName = function(command) {
return (command || '').toUpperCase();
};
var getArgArrayString = function(args, upperFlg) {
var values = getArgString(args, upperFlg).split(',');
for (var i = 0; i < values.length; i++) values[i] = values[i].trim();
return values;
};
var getArgString = function(arg, upperFlg) {
arg = convertEscapeCharacters(arg);
return upperFlg ? arg.toUpperCase() : arg;
};
var getArgNumber = function(arg, min, max) {
if (arguments.length < 2) min = -Infinity;
if (arguments.length < 3) max = Infinity;
return (parseInt(convertEscapeCharacters(arg), 10) || 0).clamp(min, max);
};
var convertEscapeCharacters = function(text) {
if (text == null) text = '';
var windowLayer = SceneManager._scene._windowLayer;
return windowLayer ? windowLayer.children[0].convertEscapeCharacters(text) : text;
};
var convertEscapeCharacters = function(text) {
if (text == null) text = '';
text = text.replace(/\/g, 'x1b');
text = text.replace(/x1bx1b/g, '\');
text = text.replace(/x1bV[(d+)]/gi, function() {
return $gameVariables.value(parseInt(arguments[1], 10));
}.bind(this));
text = text.replace(/x1bV[(d+)]/gi, function() {
return $gameVariables.value(parseInt(arguments[1], 10));
}.bind(this));
text = text.replace(/x1bN[(d+)]/gi, function() {
var actor = parseInt(arguments[1], 10) >= 1 ? $gameActors.actor(parseInt(arguments[1], 10)) : null;
return actor ? actor.name() : '';
}.bind(this));
text = text.replace(/x1bP[(d+)]/gi, function() {
var actor = parseInt(arguments[1], 10) >= 1 ? $gameParty.members()[parseInt(arguments[1], 10) - 1] : null;
return actor ? actor.name() : '';
}.bind(this));
text = text.replace(/x1bG/gi, TextManager.currencyUnit);
return text;
};
//-----------------------------------------------------------------------------
// プラグインパラメータ 取得
//-----------------------------------------------------------------------------
var paramTrackingID = getParamString(['TrackingID', 'トラッキングID']);
var paramIsAnalyzingMove = getParamBoolean(['isAnalyzingMove', '場所移動をトラッキング']);
var paramIsAnalyzingCommand = getParamBoolean(['isAnalyzingCommand', 'プラグインコマンドのトラッキング']);
var paramIsAnalyzingStartup = getParamBoolean(['isAnalyzingStartup ', '起動直後からトラッキング']);
var paramIsAddAxes = getParamBoolean(['isAddAxes', '仮想ページタイトルに座標を追加']);
var paramIsMapNameUrl = getParamBoolean(['isMapNameUrl', '仮想URLにマップ名を適用']);
var paramIsDisplayPolicy = getParamBoolean(['isDisplayPolicy', 'ポリシーの掲載']);
var paramPolicyName = getParamString(['PolicyName', 'ポリシーの名称']);
var paramPolicyDetail1 = getParamString(['PolicyDetail1', 'ポリシーの内容1']);
var paramPolicyDetail2 = getParamString(['PolicyDetail2', 'ポリシーの内容2']);
var paramPolicyDetail3 = getParamString(['PolicyDetail3', 'ポリシーの内容3']);
var paramPolicyBreakSize = getParamNumber(['PolicyBreakSize', 'ポリシーの改行文字数']);
var Startuped = paramIsAnalyzingStartup;
//-----------------------------------------------------------------------------
// 環境変数
//-----------------------------------------------------------------------------
var LocationPathnames = document.location.pathname.split(”/”);
LocationPathnames.pop();
var LocationPathname = LocationPathnames.join(”/”);
var onNetwork = document.location.protocol.match(/^http|^https/);
//-----------------------------------------------------------------------------
// 一定文字数で改行適用する処理
//-----------------------------------------------------------------------------
function insert_br(ist, num) {
var ists = ist.split('');
ist = ””;
function getLength(moji) {
var i,cnt = 0;
for(i=0; i<moji.length; i++) if (escape(moji.charAt(i)).length >= 4 ) cnt+=2; else cnt++;
return cnt;
}
var count_ist = 0;
for (var i = 0; i < ists.length; i++) {
var istAt = ists[i];
ist += istAt;
count_ist += getLength(istAt);
if( count_ist > num ) {
count_ist = 0;
ist += ”n”;
}
}
return ist;
}
//-----------------------------------------------------------------------------
// <br>を改行文字に置換
//-----------------------------------------------------------------------------
function replace_br(ist) {
return ist.replace( /<br>/g , ”n” ) ;
}
//-----------------------------------------------------------------------------
// Google Analytics 読込
//-----------------------------------------------------------------------------
if( onNetwork ) {
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', paramTrackingID, 'auto', {'name': 'bitomv'});
// ga('bitomv.send', 'pageview');
} else {
console.warn( pluginName + ”はローカル環境では動作しません。” );
}
//=============================================================================
// Window_TitleCommand
// プライバシーポリシーの選択肢を追加定義します。
//=============================================================================
if( paramIsDisplayPolicy ) {
var _BITO_Window_TitleCommand_makeCommandList = Window_TitleCommand.prototype.makeCommandList;
Window_TitleCommand.prototype.makeCommandList = function() {
_BITO_Window_TitleCommand_makeCommandList.call(this);
this.addCommand(paramPolicyName, 'PolicyView', paramIsDisplayPolicy);
};
/* @triacontane
*
* 加えた処理について
* $gameMessageにテキストを設定してもテキストを表示するウィンドウがなければ
* メッセージは表示されません。また、メッセージ表示後はタイトルコマンドを再度
* アクティブ(選択・決定可能な状態にすること)にする必要があります。
*
* 以上の点から、Window_ScrollTextの作成処理と、
* フレーム更新時にテキストが存在しない状態、かつタイトルコマンドが非アクティブなら
* タイトルコマンドをアクティブにする処理を追加しています。
*
* また、ウィンドウに表示するメッセージは自動改行されないので
* もとのメッセージの中に必要に応じて改行コードを挿入する必要があります。
*
*/