public GoogleAnalyticsService(Context c, IPackageInfo packageInfo, IAppSettings settings, ILogger logger)
        {
            Trackers = new List <Tracker>();

            try
            {
                var instance = GoogleAnalytics.GetInstance(c);
                instance.SetLocalDispatchPeriod(20);

                // Prevent testing/debugging data from being sent to GA
                #if DEBUG
                instance.SetDryRun(true);
                #endif

                // MK's tracking id
                Trackers.Add(instance.NewTracker("UA-44714416-1"));

                if (settings.Data.GoogleAnalyticsTrackingId.HasValue())
                {
                    // Company's own tracking id
                    Trackers.Add(instance.NewTracker(settings.Data.GoogleAnalyticsTrackingId));
                }

                var appName = settings.Data.TaxiHail.ApplicationName.Replace(' ', '_');
                var version = packageInfo.Version;
                Trackers.ForEach(x => {
                    x.SetAppName(appName);
                    x.SetAppVersion(version);
                });
            }
            catch (Exception ex)
            {
                logger.LogError(ex);
            }
        }
Exemplo n.º 2
0
        public GoogleAnalyticsService(Context c, IPackageInfo packageInfo, IAppSettings settings, ILogger logger)
        {
            Trackers = new List <Tracker>();

            try
            {
                GAServiceManager.Instance.SetDispatchPeriod(20);

                var instance = GoogleAnalytics.GetInstance(c);

                // Prevent testing/debugging data from being sent to GA
                #if DEBUG
                instance.SetDebug(true);
                #endif

                // MK's tracking id
                Trackers.Add(instance.GetTracker("UA-44714416-1"));

                if (settings.Data.GoogleAnalyticsTrackingId.HasValue())
                {
                    // Company's own tracking id
                    var tracker = instance.GetTracker(settings.Data.GoogleAnalyticsTrackingId);

                    // TODO MKTAXI-3716 Verify if this solution is viable, since it's by company and it should not be called everytime the app starts
                    // A campaign can be set manually:
                    //var uriPath = "http://www.taxihail.com/?utm_source=email&utm_medium=cool_installations&utm_campaign=installations&utm_content=blih";
                    //tracker.SetCampaign(uriPath);
                    Trackers.Add(tracker);
                }

                var appName = settings.Data.TaxiHail.ApplicationName.Replace(' ', '_');
                var version = packageInfo.Version;
                Trackers.ForEach(x => {
                    x.SetAppName(appName);
                    x.SetAppVersion(version);
                });
            }
            catch (Exception ex)
            {
                logger.LogError(ex);
            }
        }
        private void EnsureApnsStarted()
        {
            if (_appleStarted)
            {
                return;
            }


            try
            {
                _appleStarted = true;
                ApnsConfiguration configuration;

#if DEBUG
                // looks like for now we should specify production even in debug, using sandbox messages are not coming through.
                const ApnsConfiguration.ApnsServerEnvironment environment = ApnsConfiguration.ApnsServerEnvironment.Production;
                var certificatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
                                                   _serverSettings.ServerData.APNS.DevelopmentCertificatePath);
#else
                const ApnsConfiguration.ApnsServerEnvironment environment = ApnsConfiguration.ApnsServerEnvironment.Production;
                var certificatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
                                                   _serverSettings.ServerData.APNS.ProductionCertificatePath);
#endif

                // Apple settings placed next for development purpose. (Crashing the method when certificate is missing.)
                var appleCert = File.ReadAllBytes(certificatePath);

                configuration = new ApnsConfiguration(environment, appleCert, _serverSettings.ServerData.APNS.CertificatePassword);
                _apps.Add(iOSApp, new AppPushBrokers {
                    Apns = new ApnsServiceBroker(configuration)
                });

                _apps[iOSApp].Apns.OnNotificationSucceeded += OnApnsNotificationSucceeded;
                _apps[iOSApp].Apns.OnNotificationFailed    += (notification, aggregateEx) =>
                {
                    aggregateEx.Handle(ex =>
                    {
                        // See what kind of exception it was to further diagnose
                        if (ex is ApnsNotificationException)
                        {
                            var x = ex as ApnsNotificationException;

                            // Deal with the failed notification
                            ApnsNotification n = x.Notification;
                            string description = "Message: " + x.Message + " Data:" + x.Data.ToString();

                            _logger.LogMessage(string.Format("Notification Failed: ID={0}, Desc={1}", n.Identifier, description));
                        }
                        else if (ex is ApnsConnectionException)
                        {
                            var x = ex as ApnsConnectionException;
                            string description = "Message: " + x.Message + " Data:" + x.Data.ToString();

                            _logger.LogMessage(string.Format("Notification Failed: Connection exception, Desc={0}", description));
                        }
                        else if (ex is DeviceSubscriptionExpiredException)
                        {
                            LogDeviceSubscriptionExpiredException((DeviceSubscriptionExpiredException)ex);
                        }
                        else if (ex is RetryAfterException)
                        {
                            LogRetryAfterException((RetryAfterException)ex);
                        }
                        else
                        {
                            _logger.LogMessage("Notification Failed for some (Unknown Reason)");
                        }


                        // Mark it as handled
                        return(true);
                    });
                };

                _apps[iOSApp].Apns.Start();
            }
            catch (Exception e)
            {
                _logger.LogError(e);
            }
        }