public async Task SendFriendLinkViaSms() { IsLoading = true; var result = await ChatMessageManager.GetTransportsAsync(); if (!result.Any()) { IsLoading = false; await ResultChecker.SendMessageDialogAsync(_loader.GetString("NoSMS/Text"), false); return; } var link = await CreateFriendLink(); if (!string.IsNullOrEmpty(link)) { var chat = new ChatMessage { Subject = _loader.GetString("FriendRequestBody/Text"), Body = string.Format("{0} {1}", _loader.GetString("FriendRequestBody/Text"), link) }; await ChatMessageManager.ShowComposeSmsMessageAsync(chat); } IsLoading = false; }
private async void ComposeMessage_Click(object sender, RoutedEventArgs e) { //Check if the current device has any transports that can deliver //a text message. Note that calling this API requires the chat //capability (see Package.appxmanifest) var transports = await ChatMessageManager.GetTransportsAsync(); //If there are transports available, call ShowComposeSmsMessageAsync if (transports.Any()) { var textMessage = new ChatMessage(); textMessage.Body = Message.Text; await ChatMessageManager.ShowComposeSmsMessageAsync(textMessage); } }
public async void Run(IBackgroundTaskInstance taskInstance) { // A message has been received from a sender not on the block list. // We must decide whether to block it or to allow it. var deferral = taskInstance.GetDeferral(); Dictionary <string, ChatMessageTransportKind> transportIdToTransportKind = new Dictionary <string, ChatMessageTransportKind>(); // Prepare the mapping for TransportKind check var transports = await ChatMessageManager.GetTransportsAsync(); foreach (ChatMessageTransport transport in transports) { transportIdToTransportKind[transport.TransportId] = transport.TransportKind; } ChatMessageStore msgStore = await ChatMessageManager.RequestStoreAsync(); // Untriaged is a transient status for less than 1 second. // If a message is not blocked in time, the status will be changed by system. // The message blocked by block list will not fire this trigger. ChatMessageReader msgReader = msgStore.GetMessageReader(TimeSpan.FromSeconds(1)); var msgList = await msgReader.ReadBatchAsync(); foreach (ChatMessage msg in msgList) { if (transportIdToTransportKind[msg.TransportId] == ChatMessageTransportKind.Untriaged) { // Check if the message should be blocked. // This sample blocks messages whose text is "block me". if (msg.Body == "block me") { try { await ChatMessageBlocking.MarkMessageAsBlockedAsync(msg.Id, true); } catch (System.UnauthorizedAccessException) { // Untriaged message will be recalled by system in 1 second. Toast.Send("Block failed due to timeout"); } } } } deferral.Complete(); }
public async static Task <bool> SendTextMessageAsync(SmsDevice2 device, string[] numbers, string textmessage, string transportId = "0") { bool returnresult = true; ChatMessageStore store = await ChatMessageManager.RequestStoreAsync(); if (string.IsNullOrEmpty(transportId) || await ChatMessageManager.GetTransportAsync(transportId) == null) { var transports = await ChatMessageManager.GetTransportsAsync(); if (transports.Count != 0) { var transport = transports[0]; transportId = transport.TransportId; } else { transportId = await ChatMessageManager.RegisterTransportAsync(); } } try { SmsTextMessage2 message = new SmsTextMessage2(); message.Body = textmessage; foreach (var number in numbers) { var num = number.Trim(); message.To = num; try { SmsSendMessageResult result = await device.SendMessageAndGetResultAsync(message); var offset = new DateTimeOffset(DateTime.Now); returnresult &= result.IsSuccessful; try { ChatMessage msg = new ChatMessage(); msg.Body = textmessage; msg.Recipients.Add(num); msg.LocalTimestamp = offset; msg.NetworkTimestamp = offset; msg.IsIncoming = false; msg.TransportId = transportId; msg.MessageOperatorKind = ChatMessageOperatorKind.Sms; msg.Status = result.IsSuccessful ? ChatMessageStatus.Sent : ChatMessageStatus.SendFailed; await store.SaveMessageAsync(msg); } catch { } } catch { returnresult = false; } } } catch { returnresult = false; } return(returnresult); }