Met Twitter-integratie kunnen gebruikers app-inhoud delen op hun tijdlijn. Op multimedia-apps kan een gebruiker bijvoorbeeld het nummer waarnaar hij aan het luisteren is tweet, of als de app een spel is, kan een nieuwe ontgrendelde prestatie worden getweet. Door Twitter te integreren in uw app, valt het op en kunnen gebruikers het promoten.
Om te beginnen, moeten we een nieuw project maken op Visual Studio. Voor deze tutorial hebben we een eenvoudige app nodig, dus selecteer de optie "Windows Phone App":
Als u Visual Studio 2012 met de nieuwe WP8 SDK gebruikt, wordt u gevraagd naar de Windows-besturingssysteemversie van Target. Als dat het geval is, selecteert u 7.1.
Nu het project is gemaakt, opent u het bestand "MainPage.xaml", als dit nog niet is geopend, en wijzigt u het tekstvak van de standaardtoepassing en de paginanaam:
Voeg nu in het ContentPanel-raster twee rijen toe, één voor een TextBox waar de gebruiker de nieuwe status invoert en de andere voor de knop om de status in te dienen:
Voeg vervolgens een TextBox toe op de eerste rij met de naam "Message" en een knop op de tweede rij:
Aan het eind zou je dit moeten hebben:
Om verbinding met Twitter te maken, hebt u eerst een ontwikkelaarsaccount nodig. Ga naar de startpagina van de Twitter-ontwikkelaar en log in met uw Twitter-account of maak er een aan als u die nog niet heeft.
Als u bent ingelogd, gaat u naar de pagina "Mijn applicaties" en klikt u vervolgens op de knop "Een nieuwe applicatie maken". Op de volgende pagina vult u de Application Details in. Als u al een website heeft, voert u uw site in op de velden Website en Callback-URL. Gebruik anders een tijdelijke aanduiding zoals 'http://www.google.com'. Na deze stap verschijnt een nieuwe pagina met twee tokens, het "Toegangstoken" en het "Toegangstokengeheim". Kopieer deze codes en voeg ze als constante tekenreeksen toe aan je constructor "MainPage.xaml.cs":
private const string consumerKey = "uw sleutel hier"; private const string consumerSecret = "uw geheim hier"; // Constructor public MainPage () InitializeComponent ();
Twitter heeft een volledige API waarmee u uw app op verschillende manieren kunt verbinden met de service. Het is duidelijk en gemakkelijk te volgen, dus het is een geweldige add-on voor elke app. Merk op dat de authenticatie-API is gebouwd met behulp van OAuth, wat het erg veilig maakt, maar ontwikkelaars problemen geeft om verbinding te maken met de API. De stappen om verbinding te maken met de API worden uitgelegd in de OAuth-documentatie van de API. Er zijn verschillende manieren om verbinding te maken, maar in deze zelfstudie gebruiken we de machtiging met 3 niveaus. Deze methode vraagt om een Request Token, neemt de gebruiker vervolgens mee naar een inlogpagina en verzamelt de AccessToken. Dit proces kan een beetje ingewikkeld zijn, vooral als u slechts één of twee functies van de API probeert toe te voegen. Gelukkig is er een bibliotheek ontwikkeld door Daniel Crenna, genaamd Tweetsharp. Tweetsharp is een geweldig hulpmiddel dat de communicatie tussen uw WP7-apps en Twitter zal vereenvoudigen. Het is heel eenvoudig te gebruiken en geeft u toegang tot de hele Twitter API vanuit slechts één bibliotheek:
TweetSharp is een Twitter API-bibliotheek die de taak vereenvoudigt om Twitter toe te voegen aan uw desktop-, web- en mobiele applicaties. U kunt eenvoudige widgets of complexe toepassingssuites bouwen met TweetSharp.
U kunt meer informatie over het project vinden door naar hun website te gaan en door de gehoste voorbeeldprojecten te kijken.
De bibliotheek is alleen beschikbaar via NuGet, dus in het geval dat Visual Studio de NugGet Package-manager niet bevat, moet u deze downloaden van de NuGet-startpagina. Om het pakket te downloaden, opent u de Package Manager-console in Visual Studio (Extra> Bibliotheekpakketbeheer> Pakketbeheerconsole) en voert u de volgende opdracht in:Installeer-pakket TweetSharp
.
Nu we de bibliotheek hebben, kunnen we deze aan ons project toevoegen. Voeg een nieuwe import toe in het bestand "MainPage.xaml.cs":
Tweetsharp gebruiken
Om een app aan een Twitter-account van een gebruiker te koppelen, moeten we eerst toegang en toestemming voor het Twitter-account krijgen. Dit gebeurt via de webpagina van Twitter. Daarom moeten we een webbrowser toevoegen. De browser moet het grootste deel van de pagina beslaan, dus in eerste instantie zal het worden samengevouwen en vervolgens alleen zichtbaar worden wanneer de gebruiker moet inloggen. Voeg in het bestand "MainPage.xaml" een nieuwe WebBrowser toe net onder het ContentPanel:
Nu we Tweetsharp en de webbrowser hebben toegevoegd, kunnen we doorgaan en onze app koppelen aan Twitter. De verbinding gebeurt via een TwitterService-object. Daarom moeten we een private globale variabele maken en deze initialiseren op de constructor:
privé TwitterService-klant; // Constructor public MainPage () InitializeComponent (); client = nieuwe TwitterService (consumerKey, consumerSecret);
De eerste keer dat een gebruiker op uw "Tweet" -knop klikt, moet u hem naar de inlogpagina van Twitter sturen, zodat hij u de benodigde toestemming voor uw app kan geven. Vraag hiervoor om een RequestToken. Zodra je het token hebt, ga je naar de inlogpagina. Eerst moet u de klikgebeurtenis toevoegen aan uw Click-knop:
Voeg nu die methode toe aan de code:
private void tweetClick (object afzender, RoutedEventArgs e) // Vraag naar het token
Voordat we de code voor het token kunnen toevoegen, hebben we twee dingen nodig, een Booleaanse variabele die ons vertelt of de gebruiker al is ingelogd en een variabele die de RequestToken opslaat. Laten we dit toevoegen aan de code boven de constructor:
privé OAuthRequestToken requestToken; private bool userAuthenticated = false;
Nu de variabelen klaar zijn, kunnen we gaan en de methode creëren voor het verwerken van onze RequestedToken. Dit zal controleren op fouten. Als alles correct is gedaan, slaat u het token op en neemt u de gebruiker mee naar de aanmeldings-URL van het RequestToken:
private void processRequestToken (OAuthRequestToken-token, TwitterResponse-reactie) if (token == null) Dispatcher.BeginInvoke (() => MessageBox.Show ("Fout bij het ophalen van aanvraagtoken");); else requestToken = token; Dispatcher.BeginInvoke (() => Browser.Visibility = System.Windows.Visibility.Visible; Browser.Navigate (client.GetAuthorizationUri (requestToken)););
Voeg nu de code toe om het token aan te vragen bij de Click-evenementmethode:
// Als de gebruiker al is ingelogd, verzendt u de tweet, anders ontvangt u de RequestToken als (userAuthenticated) // de Tweet verzendt, dit is slechts een tijdelijke aanduiding, we zullen de huidige code later toevoegen Dispatcher.BeginInvoke (() => MessageBox.Show ("Placeholder voor tweet sending");); else client.GetRequestToken (processRequestToken);
Nadat de gebruiker zich heeft aangemeld en onze app heeft geaccepteerd, neemt Twitter ons mee naar een URL met een controlecode die we nodig hebben om de AccessToken aan te vragen. Laten we deze evenementmethode toevoegen aan onze browser
Gebruik de gebeurteniscode:
private void browser Navigatie (object afzender, System.Windows.Navigation.NavigationEventArgs e)
Om de verificatiecode van de URL op te halen, hebben we een parser nodig, wat in dit geval een methode is in de bibliotheek met hangmatextensies. Kopieer deze code en voeg deze toe aan uw project:
// From Hammock.Extensions.StringExtensions.cs public static IDictionaryParseQueryString (tekenreeksquery) // [DC]: deze methode decodeert niet URL en kan gedecodeerde invoer niet verwerken als (query.StartsWith ("?")) Query = query.Substring (1); if (query.Equals (string.Empty)) retourneer nieuw woordenboek (); var parts = query.Split (nieuw [] '&'); return parts.Select (part => part.Split (nieuw [] '=')). ToDictionary (pair => pair [0], pair => pair [1]);
Met deze methode kunnen we de verificatiecode op de methode browsernavigated event ophalen:
private void browserNavigated (object afzender, System.Windows.Navigation.NavigationEventArgs e) if (e.Uri.AbsoluteUri.Contains ("oauth_verifier")) var values = ParseQueryString (e.Uri.AbsoluteUri); string verifier = waarden ["oauth_verifier"]; // getTheAccessToken Dispatcher.BeginInvoke (() => Browser.Visibility = System.Windows.Visibility.Collapsed;);
Net als bij de RequestToken, moeten we een methode maken die het resultaat van de AccessToken-aanvraag afhandelt. Zodra we het resultaat hebben ontvangen, moeten we controleren op fouten. Als het verzoek met succes is gedaan, authenticeren we de gebruiker en sturen we de Tweet:
privé ongeldige procesAccessToken (OAuthAccessToken-token, TwitterResponse-reactie) if (token == null) Dispatcher.BeginInvoke (() => MessageBox.Show ("Fout bij verkrijgen van toegangstoken");); else client.AuthenticateWith (token.Token, token.TokenSecret); userAuthenticated = true; // Stuur de Tweet, we zullen deze code later toevoegen
Als dit is voltooid, gaat u naar de browser-navigatiemethode en wijzigt u de getTheAccessToken-opmerking met de volgende regel:
client.GetAccessToken (requestToken, verifier, processAccessToken);
Wanneer we een Tweet verzenden, willen we weten of deze met succes is verzonden. Dat is waarom we een andere methode nodig hebben om een Tweet te verwerken. Dit is de code die we moeten toevoegen:
private void tweetResponse (TwitterStatus tweet, TwitterResponse-reactie) if (response.StatusCode == HttpStatusCode.OK) Dispatcher.BeginInvoke (() => MessageBox.Show ("Tweet posted with");); else Dispatcher.BeginInvoke (() => MessageBox.Show ("Fout, probeer het later opnieuw"););
Tenslotte, ga naar de Tweet commentaar verzenden op de processAccessToken en tweetClick-methoden met de volgende regel:
Dispatcher.BeginInvoke (() => client.SendTweet (Message.Text, tweetResponse));
Op dit moment zou je app volledig functioneel moeten zijn, dus ga hem testen. Voer een bericht in klik op de knop "Tweet" en het volgende scherm zou moeten verschijnen.
Hierna verschijnt een bericht met de tekst "Tweet posted succesvol":
Als je naar het Twitter-account gaat, zou je ook de Tweet moeten kunnen zien die je net hebt verzonden:
Gefeliciteerd! Je hebt nu een app die verbinding kan maken met Twitter! Maar we zijn nog niet klaar. Er zijn een aantal gebieden die we kunnen verbeteren.
Telkens wanneer een gebruiker uw app opent, moet hij de inlogpagina van Twitter doorlopen. Dit is iets dat gebruikers niet leuk vinden. Ze willen één keer registreren en kunnen zonder problemen tweeten. Dit probleem is eenvoudig op te lossen. We moeten de AccessToken opslaan die we hebben verkregen bij de eerste aanmelding van de gebruiker. Als dit is voltooid, wordt het opgeslagen op IsolatedStorage en altijd toegankelijk. Dit kan gedaan worden door de volgende methode te gebruiken:
private void saveAccessToken (OAuthAccessToken-token) if (IsolatedStorageSettings.ApplicationSettings.Contains ("accessToken")) IsolatedStorageSettings.ApplicationSettings ["accessToken"] = token; else IsolatedStorageSettings.ApplicationSettings.Add ("accessToken", token); IsolatedStorageSettings.ApplicationSettings.Save ();
En de bibliotheek IsolatedStorage importeert:
met behulp van System.IO.IsolatedStorage;
Nu kunnen we de verkregen AccessToken opslaan met de methode processAccessToken:
privé ongeldige procesAccessToken (OAuthAccessToken-token, TwitterResponse-reactie) if (token == null) Dispatcher.BeginInvoke (() => MessageBox.Show ("Fout bij verkrijgen van toegangstoken");); else client.AuthenticateWith (token.Token, token.TokenSecret); saveAccessToken (token); userAuthenticated = true; Dispatcher.BeginInvoke (() => client.SendTweet (Message.Text, tweetResponse));
Met het token al op IsolatedStorage, hebben we een methode nodig om het op te halen. Ga je gang en voeg de volgende methode toe:
private OAuthAccessToken getAccessToken () if (IsolatedStorageSettings.ApplicationSettings.Contains ("accessToken")) retourneren IsolatedStorageSettings.ApplicationSettings ["accessToken"] als OAuthAccessToken; anders return null;
Deze functie zou aangeroepen moeten worden door de constructor omdat we vanaf het allereerste begin ingelogd willen zijn:
// Constructor public MainPage () InitializeComponent (); client = nieuwe TwitterService (consumerKey, consumerSecret); // Chek als we al het Autehntification-gegevens var token = getAccessToken () hebben; if (token! = null) client.AuthenticateWith (token.Token, token.TokenSecret); userAuthenticated = true;
Houd er bovendien rekening mee dat de gebruiker de toestemming van onze app kan weigeren, dus we moeten dit detecteren en opnieuw toestemming vragen. Deze detectie moet worden uitgevoerd op onze tweetResponse-methode, want daar meldt Twitter je op elk probleem met je bericht. Wijzig de code van tweetResponse in het volgende:
private void tweetResponse (TwitterStatus tweet, TwitterResponse-reactie) if (response.StatusCode == HttpStatusCode.OK) Dispatcher.BeginInvoke (() => MessageBox.Show ("Tweet posted succesvol");); else if (response.StatusCode == HttpStatusCode.Unauthorized) saveAccessToken (null); userAuthenticated = false; Dispatcher.BeginInvoke (() => MessageBox.Show ("Authentication error");); else Dispatcher.BeginInvoke (() => MessageBox.Show ("Fout, probeer het later opnieuw"););
Nog een laatste functie die u aan uw app kunt toevoegen, is dat de gebruiker de browser sluit als hij dat wil. Als de browser verschijnt, is de enige manier om deze te sluiten, door u aan te melden of met een foutmelding. U kunt de gebruiker deze optie geven via de knop Terug:
beschermde override void OnBackKeyPress (System.ComponentModel.CancelEventArgs e) if (Browser.Visibility == System.Windows.Visibility.Visible) Browser.Visibility = System.Windows.Visibility.Collapsed; e.Cancel = true; base.OnBackKeyPress (e);
Deze tutorial is een korte uitleg van wat je kunt doen met Tweetsharp en Twitter. Als je geïnteresseerd bent in het verbeteren van de functionaliteit van je app, zoals het krijgen van vermeldingen, retweets, directe berichten en verschillende andere functies, ga dan naar de website van Tweetsharp en je vindt alles wat je nodig hebt om een geweldige app te ontwikkelen. Ik hoop dat je deze tutorial leuk vond en dat het nuttig zal zijn voor je toekomstige projecten.