Tag Archives: C#

Send SMS mit Windows 8 (C#)

Der Versandt von SMS ist durchaus ein adäquates Mittel, um auf wichtige Ereignisse hinzuweisen. Sei es, dass die eigene Highscore übertroffen wurde, der Akku des Rasenmäherroboters kurz vor der Grillparty zur Neige geht oder einfach nur so, um seinen Liebsten eine nette Nachricht zu senden. Glücklicherweise bietet der Developer Garten hier Hilfe: Dort findet sich die Beschreibung einer umfangreichen Schnittstelle (API).

Doch bevor es losgeht, ein klein wenig Vorbereitung: Zuerst einmal ist eine Registrierung unter http://www.developercenter.telekom.com/ notwendig. Anschließend kann dort die Send SMS API im Bereich Telekom API´s freigeschaltet werden (aktuell sind 10 SMS am Tag für Developer kostenlos).

Vor der Nutzung der API steht jedoch die Autorisation. Es gibt verschiedene Wege, um das zu bewerkstelligen. Ähnlich zu OAuth verhält sich hier TAuth (T wie Telekom). Es werden nur Benutzername und Passwort wie bei der Registrierung gewählt benötigt. Im C# Code für Windows 8 (Metro) sieht das dann so aus:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
///
<summary>/// Url of STS service. Can be overwritten if needed.
/// </summary>
 
private static string UPAuthUrl = "https://sts.idm.telekom.com/rest-v1/tokens/odg";
 
private string username = "username";
private string password = "password";
 
///
<summary>/// Generated by STS service.
/// </summary>
 
private string token;
 
private async void authenticate()
{
 
HttpClientHandler handler = new HttpClientHandler();
handler.Credentials = new NetworkCredential(username, password);
 
HttpClient client = new HttpClient(handler);
 
try
{
HttpResponseMessage response = await client.GetAsync(UPAuthUrl);
// Force an exception if the web server returned an HTTP error status code
response.EnsureSuccessStatusCode();
 
String content = await response.Content.ReadAsStringAsync();
JsonObject json = JsonObject.Parse(content);
token = json.GetNamedValue("token").GetString();
 
// proceed to api call
sendSMS();
}
catch (HttpRequestException hre)
{
Debug.WriteLine(hre.ToString());
}
catch (Exception ex)
{
Debug.WriteLine(ex.ToString());
}
 
}

Die Nutzung der API gestaltet sich nun ähnlich wie der Post-Versandt aus HTML-Formularen. Zusätzlich muss das bei der Autorisation generierte Token in den Header des HTTP-Requests injiziert werden. Hier der passende Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
///
<summary>/// Realm for authorization.
/// {0} is replaced by authorization token
/// </summary>
 
private static string Realm = "realm=\"https://odg.t-online.de\",tauth_token=\"{0}\"";
 
///
<summary>/// URL Path to Send SMS services. Can be overridden if necessary.
/// {0} is replaced by selected environment (sandbox or production)
/// </summary>
 
private static string ServicePath = "plone/odg-sms/rest/{0}/sms";
 
///
<summary>/// Address of Telekom API server.
/// </summary>
 
private static string TelekomBaseUrl = "https://gateway.developer.telekom.com/";
 
private async void sendSMS()
{
 
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("TAuth", String.Format(Realm, token));
 
Uri baseUri = new Uri(TelekomBaseUrl, UriKind.Absolute);
Uri relativeUri = new Uri(String.Format(ServicePath, "production"), UriKind.Relative);
Uri uri = new Uri(baseUri, relativeUri);
 
MultipartFormDataContent form = new MultipartFormDataContent();
form.Add(new StringContent("+4933123456"), "number");
form.Add(new StringContent("Foo"), "message");
// Optional (see http://www.developergarden.com/fileadmin/microsites/ApiProject/Dokumente/Dokumentation/Api_Doc_4_0/telekom-api-rest-4.0/html/sendsms_send_s_m_s.html)
form.Add(new StringContent("Sascha"), "originator");
 
try
{
HttpResponseMessage response = await client.PostAsync(uri, form);
// Force an exception if the web server returned an HTTP error status code
response.EnsureSuccessStatusCode();
}
catch (HttpRequestException hre)
{
Debug.WriteLine(hre.ToString());
}
catch (Exception ex)
{
Debug.WriteLine(ex.ToString());
}
 
}

Wer es sich ein wenig einfacher machen möchte, der findet im Developer Garden SDKs für verschiedene Technologien wie .NET, Java, Objective C und PHP (http://www.developergarden.com/apis/apis-sdks/sdks/). Dort gibt es auch ein Forum für Ideen und Fragen. Viel Spaß…

Windows 8 Trainings

Zur Zeit halte ich einige kostenlose Trainings rund um Windows 8 und noch sind Plätze frei. Hier die aktuellen Termine und Orte:

Und wie immer, Wünsche und Anregungen sind willkommen – am liebsten vor dem jeweiligen Training, denn dann kann ich das ggf. noch vorbereiten und einbauen.

Hardware and Software Prototyping 101 – Design and Create Next Generation Media

Am 24. April ist es soweit und ich halte zum ersten Mal meinen neuen eintägigen Workshop „Hardware and Software Prototyping 101“, in dem ich die wesentlichen Aspekte vermitteln möchte, wie man die Medien der nächsten Generation (Next Generation Media) nicht nur prototypisch plant sondern auch in die Realität umsetzt (Details und Anmeldung). Hier nun die vorläufige Agenda, bei der ich mich über Anregung und Kritik sehr freuen würde:

Teil 1: Ideenfindung, Konzeption und Vorgehensmodelle

Wesentlichen Aspekte für die Konzeption von medienübergreifenden Anwendungen.

  • Next Generation Media – Definition und Ideenfindung
  • Prototyping – Phasen und Storyboard
  • Prototyping – Wireframe und Site-Map
  • Prototyping – Software Engineering

Teil 2: Software Prototyping Practice

Prototypische Herangehensweise an die Anwendungsentwicklung.

  • Einführung Expression Blend/Sketch Flow
  • Tooling
  • Navigation und Behaviors
  • Controls, Styles und Templates
  • Layout
  • Animationen und VisualStates
  • Datenbindung und Datenlager

Teil 3: Screen and Device Independent Development

Plattformunabhängige und -neutrale Anwendungsentwicklung.

  • Web App, Hybrid, Cross-Compiler, Cross-Platform oder Native App
  • Workflow und Software-Architektur
  • LifeCycle
  • Modelle und Muster (MVVM und Presentation Model)
  • Abstraktion und Kapselung
  • ActionScript, JavaScript und C# im Vergleich

Teil 4: Prototyping Hardware and Interactivity

Externe Hardware und/oder Embedded Devices.

  • Gulf of Execution / Gulf of Evaluation
  • Embedded system versus general-purpose computer
  • Ubiquitous/Physical Computing
  • Interactions: CLI, GUI und NUI
  • Wii, Xbox Controller, Guitar Hero und Kinect
  • Lego Mindstorms
  • .NET Gadgeteer