private ApiCallResult ProcessGoogleGcmNotification(GoogleGcmApiNotificationPayLoad payLoad)
        {
            var result = new PushNotificationApiCallResult(false, "Notificaiton failed.", payLoad.DeviceUuid, payLoad.Message);
            var isRequestValid = _SecurityService.ValidateRequestKey(payLoad.AuthenticationKey);
            if (!isRequestValid)
            {
                result.Message = "Invalid Authentication Key";
            }
            else if (_GoogleGcmService.Send(payLoad))
            {
                result.IsSuccessful = _GoogleGcmService.Result.IsSuccessful;
                result.Message = _GoogleGcmService.Result.Message;
            }

            return result;
        }
        public bool Send(GoogleGcmApiNotificationPayLoad payLoad)
        {
            HookEvents(PushBroker);

            try
            {
                PushBroker.RegisterService<GcmNotification>(new GcmPushService(new GcmPushChannelSettings(_Settings.GoogleApiAccessKey)));

                var notification = new GcmNotification()
                                    .ForDeviceRegistrationId(payLoad.Token)
                                    .WithJson(payLoad.GetGoogleFormattedJson());
                
                PushBroker.QueueNotification(notification);
            }
            finally 
            {
                StopBroker(); 
            }

            return true;
        }
 public ApiCallResult GoogleGcm(GoogleGcmApiNotificationPayLoad payLoad)
 {
     return ProcessGoogleGcmNotification(payLoad);
 }