//tips
//テスト広告を外したい時
テスト広告ではなく、実際の広告を運用したいときは、unityのservicesにあるtestmodeのチェックをきちんと外すのを忘れない。
実際にアプリをリリースして本番環境で広告を表示させるようにした時に、広告の実績をUnity Dashboardで確認することができる。
//unityでのsnsシェア設定
SocialConnectorをインストールしてもSocialConnector.Share(tweetText, tweetURL, imgPath);が認識されないので、段階的に問題を確認していく。
まず、SocialConnectorの名前空間が認識されていないので、そもそもの名前空間の役割と使われ方を確認する。
名前空間は、スクリプトクラス名同士の被りをなくすため用いられるもので、例えば、using Enemy;を宣言しておくと、
public class Controller1 : MonoBehaviour
のController1が自動的にEnemy.Controller1となる。
https://docs.unity3d.com/ja/2018.4/Manual/Namespaces.html#:~:text=%E5%90%8D%E5%89%8D%E7%A9%BA%E9%96%93%E3%81%AF%E3%82%AF%E3%83%A9%E3%82%B9%E5%90%8D,%E3%82%8B%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%AE%E9%9B%86%E5%90%88%E3%81%A7%E3%81%99%E3%80%82&text=namespace%20Enemy%20%7B%20public%20class%20Controller1,MonoBehaviour%20%7B%20...%20%7D%20%7D
試しにSocialConnector.ShareからSocialConnector.の部分を抜いてみたが、
Assets/script/SNS/SNS.cs(34,9): error CS1501: No overload for method 'Share' takes 3 arguments
というエラーが発生した。
この名前空間を使用するには、namaespaceで設定する必要がある。
例えば下記のように設定できる。
namespace FolderA
{
namespace FolderB
{
public class A : Monobehaviour
{
Void Start(){}
}
}
}
この宣言された名前空間のAを使用するためには
using FolderA.FolderB;
public class B : Monobehaviour
{
Void Start()
{
A a=GetComponent<A>();
}
}
となりFolderAの中にあるFolderBのAというメソッドを取り出すことができる。
SocialConnectorのスクリプトには
namespace SocialConnector
{
public class SocialConnector
{
とされており、SocialConnector下にpublic static void Share があるので記載方法として、using SocialConnector;を宣言してからの、 SocialConnector.Shareは間違っていないことがわかる。
public const int THREE = 3;をSocialConnectorのpublic static void Share下に入れて、SNSクラス内のデバックで名前空間→クラス→変数がきちんと読み込めるか確認してみる。
名前空間SocialConnectorに変数を追加したものを、SNSクラス内できちんと確認できた。
using UnityEngine;
using System.IO;
using System.Collections;
using SocialConnector;
using UnityEngine.UI;
public class SNS : MonoBehaviour
{
void Start()
{
Debug.Log("確認");
Debug.Log(SocialConnector.SocialConnector.THREE);
Debug.Log(SocialConnector.SocialConnector.Four);
//namespace:SocialConnector class:SocialConnector 変数:THREE
}
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);
}
}
名前空間の追加部分は先頭と最後の部分。
namespace SocialConnector
{
public class SocialConnector
{
public const int THREE = 3;
および
#endif
public static void Share (string text)
{
Share (text, null, null);
}
public const int Four = 4;
となっている。
問題になっているのはtwitterへのアクセスではないかと考えられる。
ここでSocialConnectorを使わずにtwitterへアクセスする方法も確認する。
紹介されているNative Shareを試してみるときちんとshare機能が使えた。
スクリプトは下記。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
public class SNS2 : MonoBehaviour
{
private string shareMessage;
public void ClickShareButton()
{
shareMessage = "Insane!";
StartCoroutine(TakeScreenshotAndShare());
}
private IEnumerator TakeScreenshotAndShare()
{
yield return new WaitForEndOfFrame();
Texture2D ss = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
ss.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
ss.Apply();
string filePath = Path.Combine(Application.temporaryCachePath, "shared img.png");
File.WriteAllBytes(filePath, ss.EncodeToPNG());
// To avoid memory leaks
Destroy(ss);
new NativeShare().AddFile(filePath)
.SetSubject("Ninjya Travel").SetText(shareMessage)
.SetCallback((result, shareTarget) => Debug.Log("Share result: " + result + ", selected app: " + shareTarget))
.Share();
}
}