はじめに
ユーザからの不具合報告があった時に、
どの端末だとか、OSのバージョンはなんだとか知りたくなりますよね。
という事で、それらの端末情報を最初から記入した状態でメーラーが起動する機能を作りました。
OpenMailer.cs
早速コードです!
使い方は簡単で、このOpenMailer()を呼ぶだけです。
そうするとiOSでもAndroidでも、なんならUnity上でも以下のような画面でメーラーが起動します。
記載される情報は画像の通り、
- 端末名
- OS
- アプリのバージョン
- 言語
です。
コード説明
次にコード説明行ってみましょー
アプリ名、アプリバージョン
アプリ名とアプリのバージョンはPlayerSettingsで設定した値を表記しています。
アプリ名はPlayerSettings.productName、
アプリのバージョンは PlayerSettings.bundleVersion
で取得出来るのですが、PlayerSettingsを使うにはusing UnityEditorを使う必要があります。
つまりそのスクリプトをEditorフォルダに入れなくてはならず、
実機上では使えない事になります…!
これではいかんので、これらを記載した定数クラスを"自動"で作成しそれを参照しています。
自動で定数クラスを作成、更新する方法は以下の記事をご覧ください。
上記記事にあるSettingClassCreator、Create()の一番下当たりに以下のコードを記載すると、
PlayerSettingsを更新する度に定数クラスを作り直してくれます。
Dictionary<string, string> playerSettingsDic = new Dictionary<string, string>(){ {"ProductName" , PlayerSettings.productName}, {"BundleVersion", PlayerSettings.bundleVersion}, }; ConstantsClassCreator.Create ("PlayerSettingsValue", "PlayerSettingsの設定を定数で管理するクラス", playerSettingsDic);
これを使って出来た定数クラスが以下で、
/// <summary> /// PlayerSettingsの設定を定数で管理するクラス /// </summary> public static class PlayerSettingsValue { public const string PRODUCT_NAME = "アプリ名"; public const string BUNDLE_VERSION = "1.0"; }
PlayerSettingsValue.PRODUCT_NAMEのように参照して使っております。
端末名、OS
端末名やOS名はSystemInfoを使う事で取得しています。
ただし、iPhoneの端末名をdeviceModelで取るとiPhone6PlusがiPhone8などと表示されてしまうため、
iPhone.generation.ToString()で取得しています。
追記(2015.06.05)
Unity5ではiPhone.generationが使えなくなっているので、
string deviceName = SystemInfo.deviceName;
に変更する事で、iOSとAndroid双方のデバイス名が取得できます。
言語
使用言語はApplication.systemLanguage.ToString ()
を使って取得しています。
メーラー起動
Application.OpenURLの最初に"mailto:"を記載するとメーラーが起動するようです。
http://bribser.co.jp/blog/call-mailer-from-unity/
最初にメールアドレス、
続いて"?subject="の後にタイトル
最後に"&body="の後に本文
という形式です。
おわりに
この機能をどれぐらいユーザが使ってくれるかは分かりませんが、
これでバグ報告をしてくれたらめちゃくちゃ助かりますね…!