見出し画像

Unityをサーバーに繋いでメールを送ってみる

昨日、ユーザーさんからお問い合わせしてもらう、みたいな話を書きました。
何か不具合があったときに、レビューに書き込むのではなく、それ専用のフォームから連絡していただくってことですね。

んで、今日はその実装方法について書いてみたいと思います。

とりあえずなんですけど、一般的なお問い合わせ方法は、そのボタンを押したときにメールが起動する形なんですよ。
いくつかアプリを触ってみたんですが、基本的にみんなこの形でした。「お問い合わせボタン押す→メール起動」の形ですね。

んで、Unityでこれをするには、以下の記事がおすすめです。Kanさんのやつ。

ただ、昨日も書いたように、メールでお問い合わせを受けると、返信しないといけないじゃないですか。
別に無視してもいいんですけど、それもそれで心が疲れるでしょう。
なので、僕は最初から一方通行の形を設けました。

画像1

書き込んでもらうのは「名前」と「本文」だけ。
連絡先は分からないので、返信しようと思っても出来ない。
自分の心の平和を保つためには、これがベストなんですよ。

会話のラリーが出来ないので、当然解決しない問題はあるでしょうし、そもそも相手の方が何をおっしゃってるのか分からないこともあるでしょう。
でもそれでいいんです。とりあえずは、この形で良しとします。

===

えー、前置きが長くなりました。では実際の実装方法について書いていきましょう。
とりあえず流れとしては「Unityをサーバーに繋げる→そこからメールを送る」なんですよ。

サーバーへの繋げ方は、以下の記事を参考にしています。

これそのまま書くと、多分「WWW」のところで警告が出ると思うんです。
なので、これは「UnityWebRequest」に変更すればOK。

非常に適当なんですが、自分が書いたコードはこんな感じです。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;

public class ContactManager : MonoBehaviour {

   #if UNITY_EDITOR
	const string LOCALDOMAIN = "http://localhost/unity_opinion";
   #elif UNITY_ANDROID
	const string LOCALDOMAIN = "";
   #elif UNITY_IOS
	const string LOCALDOMAIN = "";
   #else
	const string LOCALDOMAIN = "";
   #endif

   public GameObject canvasMessage;
   public GameObject canvasOpinion;

   public InputField[] inputFiled = new InputField[2];

   // Start is called before the first frame update
   void Start() {
       
   }

   // Update is called once per frame
   void Update() {
       
   }

   public void PushButtonSend() {
       StartCoroutine(SendOpinion());
   }

   IEnumerator SendOpinion() {
       string deviceName = SystemInfo.deviceModel;
       string deviceOS = SystemInfo.operatingSystem;
       string name = inputFiled[0].text;
       string about = inputFiled[1].text;
       WWWForm form = new WWWForm();
       form.AddField("app_name", "お小遣い帳");
       form.AddField("opinion_name", name);
       form.AddField("opinion_text", about);
       form.AddField("device_name", deviceName);
       form.AddField("device_os", deviceOS);
       string m_url = LOCALDOMAIN + "/unity_opinion.php";
       UnityWebRequest request = UnityWebRequest.Post(m_url, form);
       yield return request.SendWebRequest();

       if (request.isHttpError || request.isNetworkError) {
           //エラーあり
           Debug.Log(request.error);
           canvasMessage.GetComponent<MessageManager>().DisplayMessage("ネットワークエラー");
       } else {
           //エラーなし
           Debug.Log(request.downloadHandler.text);
           canvasMessage.GetComponent<MessageManager>().DisplayMessage("送信完了しました");
       }
   }
}

んで、これをPHP側(サーバー側)で受け取れるんですよ。

$app_name = $_REQUEST['app_name'];
$opinion_name = $_REQUEST['opinion_name'];
$opinion_text = $_REQUEST['opinion_text'];
$device_name = $_REQUEST['device_name'];
$device_os = $_REQUEST['device_os'];

なので、あとは煮るなり焼くなり好きにしてください。
僕はPHPのmb_send_mailでメールを送ってますね。受け取った情報を自分宛てに。

えー、実装方法はこんな感じです。

次回予告
「自分のマインドセットはアフィリエイターに近い」

この記事が気に入ったらサポートをしてみませんか?