Skip to content
This repository has been archived by the owner on Apr 23, 2024. It is now read-only.

Commit

Permalink
Release AppMetrica Unity Plugin 4.3.0
Browse files Browse the repository at this point in the history
  • Loading branch information
Aliaksei Nestsiarovich committed May 19, 2022
1 parent b4c504a commit 327658e
Show file tree
Hide file tree
Showing 121 changed files with 2,510 additions and 5,903 deletions.
4 changes: 2 additions & 2 deletions AppMetrica.unitypackage
Git LFS file not shown
10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,16 @@ Documentation could be found at [AppMetrica official site][DOCUMENTATION].

## Changelog

### Version 4.3.0

* Updated native SDKs *(iOS 4.2.0, Android 4.2.0)*
* Supported [EDM4U](https://github.com/googlesamples/unity-jar-resolver) for dependency resolution
* Crash handling improved
* Added methods for error reporting `ReportError(Exception exception, string condition)`, `ReportErrorFromLogCallback(string condition, string stackTrace)`
* Added method for crash reporting `ReportUnhandledException(Exception exception)`
* Deprecared methods `ReportError(string condition, string stackTrace)`. Use the `ReportError(Exception exception, string condition)` instead
* `ReportError(string groupIdentifier, string condition, string stackTrace)`. Use the `ReportError(string groupIdentifier, string condition, Exception exception)` instead

### Version 4.2.0

* Fixed a problem with uploading app in AppStore (`YandexMobileMetrica.framework/YandexMobileMetrica' is not permitted. Your app can’t contain standalone executables or libraries, other than a valid CFBundleExecutable of supported bundles.`)
Expand Down
160 changes: 86 additions & 74 deletions YandexMetricaPluginSample/Assets/AppMetrica/AppMetrica.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,101 +12,85 @@
// Player Settings -> Other Settings -> Scripting Define Symbols

using UnityEngine;
using System.Collections;

public class AppMetrica : MonoBehaviour
{
public const string VERSION = "4.2.0";
public const string VERSION = "4.3.0";

[SerializeField]
private string ApiKey;
private static bool s_isInitialized;

[SerializeField]
private bool ExceptionsReporting = true;
private static IYandexAppMetrica s_metrica;
private static readonly object s_syncRoot = new Object();

[SerializeField]
private uint SessionTimeoutSec = 10;
[SerializeField] private string ApiKey;

[SerializeField]
private bool LocationTracking = true;
[SerializeField] private bool ExceptionsReporting = true;

[SerializeField]
private bool Logs = true;
[SerializeField] private uint SessionTimeoutSec = 10;

[SerializeField]
private bool HandleFirstActivationAsUpdate = false;
[SerializeField] private bool LocationTracking = true;

[SerializeField]
private bool StatisticsSending = true;
[SerializeField] private bool Logs = true;

private static bool _isInitialized = false;
private bool _actualPauseStatus = false;
[SerializeField] private bool HandleFirstActivationAsUpdate;

private static IYandexAppMetrica _metrica = null;
private static object syncRoot = new Object ();
[SerializeField] private bool StatisticsSending = true;

public static IYandexAppMetrica Instance {
get {
if (_metrica == null) {
lock (syncRoot) {
private bool _actualPauseStatus;

public static IYandexAppMetrica Instance
{
get
{
if (s_metrica == null)
{
lock (s_syncRoot)
{
#if UNITY_IPHONE || UNITY_IOS
if (_metrica == null && Application.platform == RuntimePlatform.IPhonePlayer) {
_metrica = new YandexAppMetricaIOS ();
if (s_metrica == null && Application.platform == RuntimePlatform.IPhonePlayer)
{
s_metrica = new YandexAppMetricaIOS();
}
#elif UNITY_ANDROID
if (_metrica == null && Application.platform == RuntimePlatform.Android) {
_metrica = new YandexAppMetricaAndroid();
}
if (s_metrica == null && Application.platform == RuntimePlatform.Android)
{
s_metrica = new YandexAppMetricaAndroid();
}
#endif
if (_metrica == null) {
_metrica = new YandexAppMetricaDummy ();
if (s_metrica == null)
{
s_metrica = new YandexAppMetricaDummy();
}
}
}
return _metrica;
}
}

void SetupMetrica ()
{
var configuration = new YandexAppMetricaConfig (ApiKey) {
SessionTimeout = (int)SessionTimeoutSec,
Logs = Logs,
HandleFirstActivationAsUpdate = HandleFirstActivationAsUpdate,
StatisticsSending = StatisticsSending,
};

#if !APP_METRICA_TRACK_LOCATION_DISABLED
configuration.LocationTracking = LocationTracking;
if (LocationTracking) {
Input.location.Start ();
return s_metrica;
}
#else
configuration.LocationTracking = false;
#endif

Instance.ActivateWithConfiguration (configuration);
}

private void Awake ()
private void Awake()
{
if (!_isInitialized) {
_isInitialized = true;
DontDestroyOnLoad (this.gameObject);
SetupMetrica ();
} else {
Destroy (this.gameObject);
if (!s_isInitialized)
{
s_isInitialized = true;
DontDestroyOnLoad(gameObject);
SetupMetrica();
}
else
{
Destroy(gameObject);
}
}

private void Start ()
private void Start()
{
Instance.ResumeSession ();
Instance.ResumeSession();
}

private void OnEnable ()
private void OnEnable()
{
if (ExceptionsReporting) {
if (ExceptionsReporting)
{
#if UNITY_5 || UNITY_5_3_OR_NEWER
Application.logMessageReceived += HandleLog;
#else
Expand All @@ -115,9 +99,10 @@ private void OnEnable ()
}
}

private void OnDisable ()
private void OnDisable()
{
if (ExceptionsReporting) {
if (ExceptionsReporting)
{
#if UNITY_5 || UNITY_5_3_OR_NEWER
Application.logMessageReceived -= HandleLog;
#else
Expand All @@ -126,23 +111,50 @@ private void OnDisable ()
}
}

private void OnApplicationPause (bool pauseStatus)
private void OnApplicationPause(bool pauseStatus)
{
if (_actualPauseStatus != pauseStatus) {
if (_actualPauseStatus != pauseStatus)
{
_actualPauseStatus = pauseStatus;
if (pauseStatus) {
Instance.PauseSession ();
} else {
Instance.ResumeSession ();
if (pauseStatus)
{
Instance.PauseSession();
}
else
{
Instance.ResumeSession();
}
}
}

private void HandleLog (string condition, string stackTrace, LogType type)
private void SetupMetrica()
{
if (type == LogType.Exception) {
Instance.ReportError (condition, condition, stackTrace);
YandexAppMetricaConfig configuration = new YandexAppMetricaConfig(ApiKey)
{
SessionTimeout = (int)SessionTimeoutSec,
Logs = Logs,
HandleFirstActivationAsUpdate = HandleFirstActivationAsUpdate,
StatisticsSending = StatisticsSending
};

#if !APP_METRICA_TRACK_LOCATION_DISABLED
configuration.LocationTracking = LocationTracking;
if (LocationTracking)
{
Input.location.Start();
}
#else
configuration.LocationTracking = false;
#endif

Instance.ActivateWithConfiguration(configuration);
}

private static void HandleLog(string condition, string stackTrace, LogType type)
{
if (type == LogType.Exception)
{
Instance.ReportErrorFromLogCallback(condition, stackTrace);
}
}
}
91 changes: 51 additions & 40 deletions YandexMetricaPluginSample/Assets/AppMetrica/BaseYandexAppMetrica.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,78 +6,89 @@
* https://yandex.com/legal/appmetrica_sdk_agreement/
*/

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
using System.Collections.Generic;

public abstract class BaseYandexAppMetrica : IYandexAppMetrica
{
private YandexAppMetricaConfig? _metricaConfig;

public event ConfigUpdateHandler OnActivation;

public YandexAppMetricaConfig? ActivationConfig {
get {
return _metricaConfig;
}
}
public YandexAppMetricaConfig? ActivationConfig { get; private set; }

public virtual void ActivateWithConfiguration (YandexAppMetricaConfig config)
public virtual void ActivateWithConfiguration(YandexAppMetricaConfig config)
{
UpdateConfiguration (config);
UpdateConfiguration(config);
}

private void UpdateConfiguration (YandexAppMetricaConfig config)
{
_metricaConfig = config;
ConfigUpdateHandler receiver = OnActivation;
if (receiver != null) {
receiver (config);
}
}
public abstract void ResumeSession();

public abstract void PauseSession();

public abstract void ResumeSession ();
public abstract void ReportEvent(string message);

public abstract void PauseSession ();
public abstract void ReportEvent(string message, IDictionary<string, object> parameters);

public abstract void ReportEvent (string message);
public abstract void ReportEvent(string message, string json);

public abstract void ReportEvent (string message, IDictionary<string, object> parameters);
[Obsolete("Use the ReportError(Exception exception, string condition) instead.")]
public abstract void ReportError(string condition, string stackTrace);

public abstract void ReportEvent (string message, string json);
[Obsolete("Use the ReportError(string groupIdentifier, string condition, Exception exception) instead.")]
public abstract void ReportError(string groupIdentifier, string condition, string stackTrace);

public abstract void ReportError (string condition, string stackTrace);
public abstract void ReportError(string groupIdentifier, string condition, Exception exception);

public abstract void ReportError (string groupIdentifier, string condition, string stackTrace);
public abstract void ReportError(
string groupIdentifier,
string condition,
YandexAppMetricaErrorDetails errorDetails
);

public abstract void ReportError (string groupIdentifier, string condition, Exception exception);
public abstract void ReportError(Exception exception, string condition);

public abstract void SetLocationTracking (bool enabled);
public abstract void ReportError(YandexAppMetricaErrorDetails errorDetails, string condition);

public abstract void SetLocation (YandexAppMetricaConfig.Coordinates? coordinates);
public abstract void ReportUnhandledException(Exception exception);

public abstract void ReportUnhandledException(YandexAppMetricaErrorDetails errorDetails);

public abstract void ReportErrorFromLogCallback(string condition, string stackTrace);

public abstract void SetLocationTracking(bool enabled);

public abstract void SetLocation(YandexAppMetricaConfig.Coordinates? coordinates);

public abstract string LibraryVersion { get; }

public abstract int LibraryApiLevel { get; }

public abstract void SetUserProfileID (string userProfileID);
public abstract void SetUserProfileID(string userProfileID);

public abstract void ReportUserProfile(YandexAppMetricaUserProfile userProfile);

public abstract void ReportUserProfile (YandexAppMetricaUserProfile userProfile);
public abstract void ReportRevenue(YandexAppMetricaRevenue revenue);

public abstract void ReportRevenue (YandexAppMetricaRevenue revenue);
public abstract void SetStatisticsSending(bool enabled);

public abstract void SetStatisticsSending (bool enabled);
public abstract void SendEventsBuffer();

public abstract void SendEventsBuffer ();
public abstract void RequestAppMetricaDeviceID(Action<string, YandexAppMetricaRequestDeviceIDError?> action);

public abstract void RequestAppMetricaDeviceID (Action<string, YandexAppMetricaRequestDeviceIDError?> action);
public abstract void ReportReferralUrl(string referralUrl);

public abstract void ReportReferralUrl (string referralUrl);
public abstract void ReportAppOpen(string deeplink);

public abstract void ReportAppOpen (string deeplink);
public abstract void PutErrorEnvironmentValue(string key, string value);

public abstract void PutErrorEnvironmentValue (string key, string value);
public abstract void RequestTrackingAuthorization(Action<YandexAppMetricaRequestTrackingStatus> action);

public abstract void RequestTrackingAuthorization (Action<YandexAppMetricaRequestTrackingStatus> action);
private void UpdateConfiguration(YandexAppMetricaConfig config)
{
ActivationConfig = config;
ConfigUpdateHandler receiver = OnActivation;
if (receiver != null)
{
receiver.Invoke(config);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0"?>
<dependencies>
<androidPackages>
<androidPackage spec="com.yandex.android:mobmetricalib:4.2.0"/>
</androidPackages>
<iosPods>
<iosPod name="YandexMobileMetrica" version="4.2.0" minTargetSdk="9.0"/>
</iosPods>
</dependencies>
Loading

0 comments on commit 327658e

Please sign in to comment.