public async Task <IActionResult> GetRegisteredDevices([FromQuery] int pageSize, string continuationToken) { try { CollectionQueryResult <RegistrationDescription> devices = string.IsNullOrEmpty(continuationToken) ? await _hubClient.GetAllRegistrationsAsync(pageSize) : await _hubClient.GetAllRegistrationsAsync(continuationToken, pageSize); return(Ok(devices)); } catch (Exception e) { return(StatusCode(StatusCodes.Status502BadGateway, e.Message)); } }
async Task DeleteAllRegistrationsAndInstallations() { string continuationToken; do { var registrations = await _hubClient.GetAllRegistrationsAsync(100); continuationToken = registrations.ContinuationToken; foreach (var registrationDescription in registrations) { await _hubClient.DeleteRegistrationAsync(registrationDescription.RegistrationId); } } while (continuationToken != null); }
private static async Task CreateAndDeleteRegistrationAsync(NotificationHubClient nhClient) { var registrationId = await nhClient.CreateRegistrationIdAsync(); var registrationDescr = await nhClient.CreateGcmNativeRegistrationAsync(registrationId); Console.WriteLine($"Created GCM registration {registrationDescr.GcmRegistrationId}"); var allRegistrations = await nhClient.GetAllRegistrationsAsync(1000); foreach (var regFromServer in allRegistrations) { if (regFromServer.RegistrationId == registrationDescr.RegistrationId) { Console.WriteLine($"Found GCM registration {registrationDescr.GcmRegistrationId}"); break; } } //registrationDescr = await nhClient.GetRegistrationAsync<GcmRegistrationDescription>(registrationId); //Console.WriteLine($"Retrieved GCM registration {registrationDescr.GcmRegistrationId}"); await nhClient.DeleteRegistrationAsync(registrationDescr); Console.WriteLine($"Deleted GCM registration {registrationDescr.GcmRegistrationId}"); }
/// <summary> /// CSV 形式で登録されている情報の一覧を出力します /// </summary> public async Task <HttpResponseMessage> Get(string platform = "", string expression = null) { // 登録情報を取得 var result = string.IsNullOrEmpty(expression) ? await _client.GetAllRegistrationsAsync(0) : await _client.GetRegistrationsByTagExpressionAsync(expression); // プラットフォームでフィルタリング var platforms = platform.Split(','); var records = result.Select(p => new RegistrationModel(p)).Where(p => platforms.Contains(p.Platform)); // CSV として出力する var writer = new StringWriter(); var csvWriter = new CsvWriter(writer); csvWriter.Configuration.RegisterClassMap <RegistrationModelMap>(); csvWriter.WriteRecords(records); // ダウンロード可能な形でレスポンスを作成 var response = new HttpResponseMessage { Content = new StringContent(writer.ToString()) }; response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "export.csv" }; response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); return(response); }
private static async Task CreateRegistrationAsync(NotificationHubClient nhClient) { var registrationId = await nhClient.CreateRegistrationIdAsync(); //var registrationDescr = await nhClient.CreateFcmNativeRegistrationAsync(registrationId); var registrationDescr = await nhClient.CreateAppleNativeRegistrationAsync(registrationId); //Console.WriteLine($"Created APNS registration {registrationDescr.FcmRegistrationId}"); //registrationDescr.RegistrationId = "96d6bb5d412881d30046f5bf5616beaddf6aa4abe57987bccc4b5c23209dbb0c"; registrationDescr.RegistrationId = "djPUqVGjd9I:APA91bE7UyqaMr0IAICU7Wz5eV5qUEaZ2nEA7YkFcz6UqCHv-nIkUNDBAE4cZdjjG5bw8WnT2Psu7-eV4GMURVXtMGzI_yju2VRAzaTShW-9xwW2qy9D_SPIRsD8xVLalVklQgy_xara"; Console.WriteLine($"Create APNS registration {registrationDescr.RegistrationId}"); var allRegistrations = await nhClient.GetAllRegistrationsAsync(1000); foreach (var regFromServer in allRegistrations) { if (regFromServer.RegistrationId == registrationDescr.RegistrationId) { //Console.WriteLine($"Found FCM registration {registrationDescr.FcmRegistrationId}"); Console.WriteLine($"Found APNS registration {registrationDescr.RegistrationId}"); break; } } //commented out by code creator (next 2 lines) //registrationDescr = await nhClient.GetRegistrationAsync<FcmRegistrationDescription>(registrationId); //Console.WriteLine($"Retrieved FCM registration {registrationDescr.FcmRegistrationId}"); }
private static async Task CreateAndDeleteRegistrationAsync(NotificationHubClient nhClient) { var registrationId = await nhClient.CreateRegistrationIdAsync(); //var registrationDescr = await nhClient.CreateFcmNativeRegistrationAsync(registrationId); var registrationDescr = await nhClient.CreateAppleNativeRegistrationAsync(registrationId); //Console.WriteLine($"Created APNS registration {registrationDescr.FcmRegistrationId}"); Console.WriteLine($"Create APNS registration {registrationDescr.RegistrationId}"); var allRegistrations = await nhClient.GetAllRegistrationsAsync(1000); foreach (var regFromServer in allRegistrations) { if (regFromServer.RegistrationId == registrationDescr.RegistrationId) { //Console.WriteLine($"Found FCM registration {registrationDescr.FcmRegistrationId}"); Console.WriteLine($"Found APNS registration {registrationDescr.RegistrationId}"); break; } } //commented out by code creator (next 2 lines) //registrationDescr = await nhClient.GetRegistrationAsync<FcmRegistrationDescription>(registrationId); //Console.WriteLine($"Retrieved FCM registration {registrationDescr.FcmRegistrationId}"); await nhClient.DeleteRegistrationAsync(registrationDescr); //Console.WriteLine($"Deleted FCM registration {registrationDescr.FcmRegistrationId}"); Console.WriteLine($"Deleted APNS registration {registrationDescr.RegistrationId}"); }
public async Task <List <RegistrationDescription> > GetRegistrationsAsync() { var cs = _connectionstring; NotificationHubClient client = NotificationHubClient.CreateClientFromConnectionString(_connectionstring, _hubName); var items = await client.GetAllRegistrationsAsync(400); return(items.ToList()); }
/// <summary> /// 通知ハブに登録されている全ての登録情報を返します /// </summary> public async Task <IEnumerable <RegistrationModel> > Get() { // 登録されている情報を全て取得 var result = await _client.GetAllRegistrationsAsync(0); // モデルへマッピングして返す return(result.Select(p => new RegistrationModel(p))); }
public async Task DeleteAllRegistrationsAsync() { NotificationHubClient client = NotificationHubClient.CreateClientFromConnectionString(_connectionstring, _hubName); var items = await client.GetAllRegistrationsAsync(400); foreach (var item in items) { await client.DeleteRegistrationAsync(item.RegistrationId); } }
public async Task <IList <RegistrationDescription> > Get() { var registrationDescriptions = await _hub.GetAllRegistrationsAsync(10); IList <RegistrationDescription> retval = new List <RegistrationDescription>(); foreach (var regdesc in registrationDescriptions) { retval.Add(regdesc); } return(retval); }
public async Task <int> DeleteRegistration() { var allRegister = await _notificationHubClient.GetAllRegistrationsAsync(100); int i = 0; foreach (var registrationDescription in allRegister) { await _notificationHubClient.DeleteRegistrationAsync(registrationDescription.RegistrationId); ++i; } return(i); }
private async Task RefreshDevices() { NotificationHubClient client = NotificationHubClient.CreateClientFromConnectionString(ConnectionString, "uwpsample"); CollectionQueryResult <RegistrationDescription> results = await client.GetAllRegistrationsAsync(0); var devicesList = results.Select(x => new DeviceRegistration { RegistrationId = x.RegistrationId, ExpirationTime = x.ExpirationTime.Value, Tags = RetrieveTags(x.Tags) }); devices = new ObservableCollection <DeviceRegistration>(devicesList); Devices.ItemsSource = devices; }
public async Task <IActionResult> OnGetAsync() { var registrations = new List <RegistrationDescription>(await _hub.GetAllRegistrationsAsync(0, CancellationToken.None)); for (int i = 0; i < registrations.Count; i++) { RegistrationData registrationData = new RegistrationData { RegistrationId = registrations[i].RegistrationId, ExpirationTime = registrations[i].ExpirationTime }; HashSet <string> tags = (HashSet <string>)registrations[i].Tags; tags.CopyTo(registrationData.Tags); Data.Add(registrationData); } return(Page()); }
public async Task <List <DeviceTrend> > GetAllRegistrationInfoAsync() { List <DeviceTrend> deviceRegistrationTrends = new List <DeviceTrend>(); int windowsRegistrationCount = 0; int fcmRegistrationCount = 0; int apnsRegistrationCount = 0; var allRegistrations = await _hub.GetAllRegistrationsAsync(0); foreach (var registration in allRegistrations) { if (registration is WindowsRegistrationDescription) { windowsRegistrationCount++; } else if (registration is FcmRegistrationDescription) { fcmRegistrationCount++; } else if (registration is AppleRegistrationDescription) { apnsRegistrationCount++; } } deviceRegistrationTrends.Add(new DeviceTrend() { DeviceType = "Windows", RegistrationCount = windowsRegistrationCount }); deviceRegistrationTrends.Add(new DeviceTrend() { DeviceType = "Android", RegistrationCount = fcmRegistrationCount }); deviceRegistrationTrends.Add(new DeviceTrend() { DeviceType = "Apple", RegistrationCount = apnsRegistrationCount }); return(deviceRegistrationTrends); }
public static async Task <IEnumerable <RegistrationDescription> > GetRegistrationsByTagExpressionAsync(this NotificationHubClient client, string tagExpression) { // タグ式を分解して、元々のオブジェクトに戻す var andExpressions = tagExpression.Split(new[] { "&&" }, StringSplitOptions.RemoveEmptyEntries).Select(p => p.Trim()).ToArray(); var tags = (from expression in andExpressions let body = expression.Trim('!', '(', ')') let orExpressions = body.Split(new[] { "||" }, StringSplitOptions.RemoveEmptyEntries).Select(p => p.Trim()).ToArray() let key = orExpressions[0].Split(':')[0] select new TagModel { Key = key, Values = orExpressions.Select(p => p.Substring(key.Length + 1)).ToArray(), Exclude = expression.StartsWith("!") }).ToArray(); IEnumerable <RegistrationDescription> results; // 否定が入っている場合には全件取得する必要がある if (tags.Any(p => p.Exclude)) { results = await client.GetAllRegistrationsAsync(0); } else { // フィルタリングに最低限必要なタグのみ取得する results = (await Task.WhenAll(tags.SelectMany(p => p.Values.Select(q => client.GetRegistrationsByTagAsync(p.Key + ":" + q, 0))))).SelectMany(p => p).Distinct(new RegistrationDescriptionComparer()); } // フィルタリングした結果を返す return(results.Where(p => tags.All(q => { if (q.Exclude) { return !q.Values.Any(r => p.Tags.Contains(q.Key + ":" + r)); } return q.Values.Any(r => p.Tags.Contains(q.Key + ":" + r)); }))); }
private async Task CleanupInstallations() { var emptyNotif = new FcmNotification("{\"data\":{\"message\":\"ola\"}}"); await _hub.SendNotificationAsync(emptyNotif, "default"); var allRegistrations = await _hub.GetAllRegistrationsAsync(0); foreach (var registration in allRegistrations) { var installationId = string.Empty; var tags = registration.Tags; foreach (var tag in tags) { if (tag.Contains("InstallationId:")) { installationId = tag.Substring(tag.IndexOf('{') + 1, 32); } } if (installationId == String.Empty) { return; } else { Trace.TraceError(installationId); } var receivedInstallation = await _hub.GetInstallationAsync(installationId); if (receivedInstallation.PushChannelExpired == true) { await _hub.DeleteInstallationAsync(receivedInstallation.InstallationId); } } }
public async Task <IHttpActionResult> ObterRegistrados() { List <RegistroViewModel> listaDeRetorno = new List <RegistroViewModel>(); var listaDeRegistrados = await _hubClient.GetAllRegistrationsAsync(100); foreach (var registrationDescription in listaDeRegistrados) { string registrationId = registrationDescription.RegistrationId; List <string> tags = registrationDescription.Tags.ToList(); if (!tags.Any(p => p.Contains("$InstallationId"))) { listaDeRetorno.Add(new RegistroViewModel() { RegistratioId = registrationId, Tags = tags }); } } var result = new { sucess = true, dados = listaDeRetorno }; return(Ok(result)); }
public async Task GetAllRegisteredDevices() { var result = await _hubClient.GetAllRegistrationsAsync(0); }
/// /// <summary> /// Get all registered devices from hub /// </summary> public async Task <string> GetRegisteredDevices() { var registrations = await _hubClient.GetAllRegistrationsAsync(0); return(JsonConvert.SerializeObject(registrations)); }
public async Task <IHttpActionResult> TriggerCheck([FromUri] int start = 0) { var sw = Stopwatch.StartNew(); int registrationCount = 0; const string toastTemplate = "<?xml version=\"1.0\" encoding=\"utf-8\"?><wp:Notification xmlns:wp=\"WPNotification\"><wp:Toast><wp:Text1>{0}</wp:Text1><wp:Text2>{1}</wp:Text2><wp:Param>{2}</wp:Param></wp:Toast></wp:Notification>"; IList <NotificationOutcome> result = new List <NotificationOutcome>(); IList <MpnsNotification> notifications = new List <MpnsNotification>(); var registrations = (await _notificationClient.GetAllRegistrationsAsync(Int32.MaxValue)).Where(x => x.Tags != null).Skip(start); var preferences = _mobileClient.GetTable <PlainNumberInfo>(); if (start == 0) { alreadyRetrieved.Clear(); } foreach (var user in registrations) { notifications.Clear(); foreach (var number in user.Tags) { try { bool dirty = false; var data = number.Split('_'); if (data.Any(x => string.IsNullOrEmpty(x))) { await _notificationClient.DeleteRegistrationAsync(user); //Tanto non saprei cosa cazzo farci. continue; } CreditInfo content = null; if (!alreadyRetrieved.Any(x => x.Username == data[0] && x.Type == data[data.Length - 1] && x.Password == string.Join("_", data.Skip(1).Take(data.Length - 2)))) { content = await _retrievers.First(x => x.Type == data[data.Length - 1]).Get(data[0], string.Join("_", data.Skip(1).Take(data.Length - 2)), data[data.Length - 1], Guid.Empty); //this.GetData(null, new Q_X { q = data[0], x = data[1], t = data[2] }); alreadyRetrieved.Add(content); } else { content = alreadyRetrieved.First(x => x.Username == data[0] && x.Type == data[2] && x.Password == data[1]); dirty = true; } foreach (var accountNumber in content.NumberInfos) { IEnumerable <PlainNumberInfo> userPreference = await preferences.Where(x => x.Number == accountNumber.Number).ToEnumerableAsync(); if (userPreference.Count() == 0) { await preferences.InsertAsync(new PlainNumberInfo { Number = accountNumber.Number, FriendlyName = accountNumber.Number, Gigabytes = accountNumber.Gigabytes, Minutes = accountNumber.Minutes, SMS = accountNumber.SMS, Credit = accountNumber.Credit, Brush = "#000000" }); } else { var dataPreference = userPreference.First(); accountNumber.Brush = dataPreference.Brush; if (string.IsNullOrEmpty(dataPreference.Brush)) { accountNumber.Brush = "#000000"; //Nero } accountNumber.FriendlyName = dataPreference.FriendlyName; if (dataPreference.NotifyEnabled) { if (accountNumber.SMS < dataPreference.SMSLimit && dataPreference.smsShowed == false) { dirty = true; dataPreference.smsShowed = true; notifications.Add(new MpnsNotification(string.Format(toastTemplate, "Warning", string.Format("{0} : raggiunto limite SMS", dataPreference.FriendlyName), string.Format("/DataPage.xaml?number={0}", HttpUtility.UrlEncode(accountNumber.Number))))); } else if (accountNumber.SMS >= dataPreference.SMSLimit) { dataPreference.smsShowed = false; } if (accountNumber.Minutes < dataPreference.MinutesLimit && dataPreference.minShowed == false) { dirty = true; dataPreference.minShowed = true; notifications.Add(new MpnsNotification(string.Format(toastTemplate, "Warning", string.Format("{0} : raggiunto limite minuti", dataPreference.FriendlyName), string.Format("/DataPage.xaml?number={0}", HttpUtility.UrlEncode(accountNumber.Number))))); } else if (accountNumber.Minutes >= dataPreference.MinutesLimit) { dataPreference.minShowed = false; } if (accountNumber.Gigabytes < dataPreference.GigabytesLimit && dataPreference.gigaShowed == false) { dirty = true; dataPreference.gigaShowed = true; notifications.Add(new MpnsNotification(string.Format(toastTemplate, "Warning", string.Format("{0} : raggiunto limite traffico", dataPreference.FriendlyName), string.Format("/DataPage.xaml?number={0}", HttpUtility.UrlEncode(accountNumber.Number))))); } else if (accountNumber.Gigabytes >= dataPreference.GigabytesLimit) { dataPreference.gigaShowed = false; } if (accountNumber.Credit < dataPreference.CreditLimit && dataPreference.clShowed == false) { dirty = true; dataPreference.clShowed = true; notifications.Add(new MpnsNotification(string.Format(toastTemplate, "Warning", string.Format("{0} : raggiunto limite credito", dataPreference.FriendlyName), string.Format("/DataPage.xaml?number={0}", HttpUtility.UrlEncode(accountNumber.Number))))); } else if (accountNumber.Credit >= dataPreference.CreditLimit) { dataPreference.clShowed = false; } accountNumber.CreditLimit = dataPreference.CreditLimit; accountNumber.SMSLimit = dataPreference.SMSLimit; accountNumber.GigabytesLimit = dataPreference.GigabytesLimit; accountNumber.MinutesLimit = dataPreference.MinutesLimit; } if (dataPreference.Credit != accountNumber.Credit || dataPreference.SMS != accountNumber.SMS || dataPreference.Gigabytes != accountNumber.Gigabytes || dataPreference.Minutes != accountNumber.Minutes) { dataPreference.Credit = accountNumber.Credit; dataPreference.SMS = accountNumber.SMS; dataPreference.Gigabytes = accountNumber.Gigabytes; dataPreference.Minutes = accountNumber.Minutes; dirty = true; } if (dirty) { dataPreference.LastUpdate = DateTime.Now; await preferences.UpdateAsync(dataPreference); } } if (dirty) { var thread = new Thread(new ThreadStart(() => { XamlRendering.ConvertToJpg(accountNumber); })); thread.SetApartmentState(ApartmentState.STA); thread.Start(); thread.Join(); var notificationPayload = string.Format(PushTemplates.NotificationTemplate, string.Format("/DataPage.xaml?number={0}", accountNumber.Number), string.Format("http://wauth.apphb.com/Tiles/{0}_159.jpg", accountNumber.Number), string.Format("http://wauth.apphb.com/Tiles/{0}_336.jpg", accountNumber.Number), string.Format("http://wauth.apphb.com/Tiles/{0}_691.jpg", accountNumber.Number)); var notification = new MpnsNotification(notificationPayload, new Dictionary <string, string> { { "X-WindowsPhone-Target", "token" }, { "X-NotificationClass", "1" } }); notifications.Add(notification); } } } catch (WrongLoginDataException) { notifications.Add(new MpnsNotification(string.Format(toastTemplate, "Warning", "Dati di login errati.", string.Empty))); _notificationClient.DeleteRegistrationAsync(user).Wait(); //Addio. Rientra nell'app e inserisci i dati giusti. } catch (Exception) { continue; } var tasks = notifications.Select(x => _notificationClient.SendNotificationAsync(x, user.Tags)); foreach (var item in tasks) { result.Add(await item); } } registrationCount++; if (100 - sw.Elapsed.TotalSeconds <= 5) { break; } } return(Ok(new NotificationProcessInfo { Registrations = registrationCount, Notifications = result.Count })); }
public async Task <HttpResponseMessage> Get() { var ids = await hub.GetAllRegistrationsAsync(100); return(Request.CreateResponse(HttpStatusCode.OK, ids.ToList())); }