SquareDash/Library/PackageCache/com.unity.services.mediation@1.0.5/Runtime/Platform/Android/AndroidImpressionEventPublisher.cs
kingjuulian06 0efb85038a Arbeit 2
2023-11-21 22:03:49 +01:00

132 lines
6.2 KiB
C#

#if UNITY_ANDROID
using System;
using UnityEngine;
namespace Unity.Services.Mediation.Platform
{
class AndroidImpressionEventPublisher : IImpressionEventPublisher, IAndroidImpressionListener, IDisposable
{
public event EventHandler<ImpressionEventArgs> OnImpression;
AndroidJavaClass m_ImpressionEventPublisher;
AndroidImpressionListener m_ImpressionListener;
volatile bool m_Disposed;
const string k_ErrorLoadingImpressionEventPublished = "Error while loading ImpressionEventPublisher. ImpressionEventPublisher will not initialize. " +
"Please check your build settings, and make sure Mediation SDK is integrated properly.";
public AndroidImpressionEventPublisher()
{
ThreadUtil.Send(state =>
{
try
{
m_ImpressionEventPublisher = new AndroidJavaClass(NativeAndroid.Class.ImpressionEventPublisher);
m_ImpressionListener = new AndroidImpressionListener(this);
m_ImpressionEventPublisher.CallStatic(NativeAndroid.Method.Subscribe, m_ImpressionListener);
}
catch (Exception e)
{
MediationLogger.LogError(k_ErrorLoadingImpressionEventPublished);
MediationLogger.LogException(e);
}
});
}
void Dispose(bool disposing)
{
if (m_Disposed) return;
m_Disposed = true;
if (disposing)
{
//AndroidJavaObjects are created and destroyed with JNI's NewGlobalRef and DeleteGlobalRef,
//Therefore must be used on the same attached thread. In this case, it's Unity thread.
ThreadUtil.Post(state =>
{
try
{
m_ImpressionEventPublisher?.CallStatic(NativeAndroid.Method.Unsubscribe, m_ImpressionListener);
m_ImpressionEventPublisher?.Dispose();
m_ImpressionEventPublisher = null;
m_ImpressionListener = null;
}
catch (Exception e)
{
MediationLogger.LogException(e);
}
});
}
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
~AndroidImpressionEventPublisher()
{
Dispose(false);
}
public void onImpression(string adUnitId, AndroidJavaObject impressionData)
{
ImpressionData impressData = null;
if (impressionData != null)
{
impressData = new ImpressionData
{
Timestamp = impressionData.Call<string>(NativeAndroid.Method.GetTimestamp),
AdUnitName = impressionData.Call<string>(NativeAndroid.Method.GetAdUnitName),
AdUnitId = impressionData.Call<string>(NativeAndroid.Method.GetAdUnitId),
AdUnitFormat = impressionData.Call<string>(NativeAndroid.Method.GetAdUnitFormat),
ImpressionId = impressionData.Call<string>(NativeAndroid.Method.GetImpressionId),
Currency = impressionData.Call<string>(NativeAndroid.Method.GetCurrency),
RevenueAccuracy = impressionData.Call<string>(NativeAndroid.Method.GetRevenueAccuracy),
PublisherRevenuePerImpression = impressionData.Call<double>(NativeAndroid.Method.GetPublisherRevenuePerImpression),
PublisherRevenuePerImpressionInMicros = impressionData.Call<Int64>(NativeAndroid.Method.GetPublishRevenuePerImpressionInMicros),
AdSourceName = impressionData.Call<string>(NativeAndroid.Method.GetAdSourceName),
AdSourceInstance = impressionData.Call<string>(NativeAndroid.Method.GetAdSourceInstance),
AppVersion = impressionData.Call<string>(NativeAndroid.Method.GetAppVersion),
LineItemId = impressionData.Call<string>(NativeAndroid.Method.GetALineItemId),
LineItemName = impressionData.Call<string>(NativeAndroid.Method.GetLineItemName),
LineItemPriority = impressionData.Call<string>(NativeAndroid.Method.GetLineItemPriority),
Country = impressionData.Call<string>(NativeAndroid.Method.GetCountry),
};
}
OnImpression?.Invoke(null, new ImpressionEventArgs(adUnitId, impressData));
}
static class NativeAndroid
{
public static class Method
{
public const string GetTimestamp = "getTimestamp";
public const string GetAdUnitName = "getAdUnitName";
public const string GetAdUnitId = "getAdUnitId";
public const string GetAdUnitFormat = "getAdUnitFormat";
public const string GetImpressionId = "getImpressionId";
public const string GetCurrency = "getCurrency";
public const string GetRevenueAccuracy = "getRevenueAccuracy";
public const string GetPublisherRevenuePerImpression = "getPublisherRevenuePerImpression";
public const string GetPublishRevenuePerImpressionInMicros = "getPublisherRevenuePerImpressionInMicros";
public const string GetAdSourceName = "getAdSourceName";
public const string GetAdSourceInstance = "getAdSourceInstance";
public const string GetAppVersion = "getAppVersion";
public const string GetALineItemId = "getLineItemId";
public const string GetLineItemName = "getLineItemName";
public const string GetLineItemPriority = "getLineItemPriority";
public const string GetCountry = "getCountry";
public const string Subscribe = "subscribe";
public const string Unsubscribe = "unsubscribe";
}
public static class Class
{
public const string ImpressionEventPublisher = "com.unity3d.mediation.ImpressionEventPublisher";
}
}
}
}
#endif