Tag Archives: Metro

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 Trainingsunterlagen

Nachdem bereits schon einige Trainings zum Thema Windows 8 gelaufen sind, stehen nun die offiziellen Trainingsunterlagen namens “Windows 8 Camp in Box” zum Download bereit. Dazu zählen die Beispiele sowohl in HTML5/JavaScript als auch in XAML/C#. In dem Download-Paket finden sich auch die offiziellen Folien als PDF.

Außerdem sind die Videos zum Thema bei Channel 9 sehenswert. Insbesondere das Video von Jensen Harris zum Thema “8 Traits of Great Metro Style Apps”. Dort gibt es auch einen umfangreichen Foliensatz als Powerpoint. Dasselbe gilt für Sam Moreau´s “Metro style: principles and personality”.

Und hier findet sich noch mein angepasster Teil inkl. Beispiele zum Thema JavaScript (für die Windows 8 Release Preview). Weitere Beispiele zu allen erdenklichen Themen gibt es als “Sample app pack Release Preview”. Sollte ich sonst noch was vergessen haben, dann bitte einfach eine E-Mail direkt an mich und ich ergänze das dann hier.

Kostenlose Windows 8 Trainings – HTML5, JavaScript und Metro Design

Auch im Juli gibt es wieder einige kostenlose Trainings rund um Windows 8. Diesmal mit dem Schwerpunkt HTML5 & JavaScript kombiniert mit einem großen Block Metro Design. Noch sind Plätze frei. Hier die aktuellen Termine und Orte:

Fragen und Anregungen zu den Inhalten der oben genannten Trainings gerne direkt an mich, allgemeine Informationen und weitere Trainings finden sich hier.