読者です 読者をやめる 読者になる 読者になる

がりらぼ

WindowsRuntimeの応援ブログ

アプリから簡単にTwitterにつぶやくには

WindowsPhone WindowsRuntime

TweetButtonのURL

アプリから簡単に情報をシェアできればアプリの情報をフォロワーに発信できてアプリの告知能力が大幅に広がります。 たとえばゲームアプリなどでスコアなどをシェアするなどがよく使用されている方法です。

しかし、わざわざシェアするためだけにアプリからTwitterOAuth認証を行い、アカウント管理を行ってつぶやくのはめんどくさいです。 WindowsiOSのようにOSレベルでTwitterへのツイートをサポートするAPIはありません。Windowsはそういうときのために共有コントラクトというものを用意して、共有します。

しかし、共有コントラクトになれないユーザーが多いのでもっと直感的にツイートできるようにしてみましょう。

WebページにはTwitterにシェアするTweetButtonというものが設置してあります。 TweetButtonは特定のURLにHTTPリクエストを送ることで簡単に特定のテキストをつぶやくことができます。

TweetButtonからツイートすると、アカウントの管理をしなくてもブラウザからログインし、アカウントを継続して使いたい場合はブラウザのキャッシュを、アカウントを切り替えたい場合はブラウザからログアウト→ログインを行うことでアカウント管理を行わなくてもつぶやけます。

今回は、このTweetButtonをアプリ内で実装して、つぶやかせます。

TweetButtonには特殊なURLがあります。

https://twitter.com/intent/tweet?text=hogehoge

このURLにブラウザからアクセスしてみると、つぶやくことができます。

なので、アプリのWebViewからこのURLにアクセスすれば、簡単につぶやくことができるというわけです。

まず、アプリにWebViewを配置しましょう。

<Page
    x:Class="App4.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App4"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid>
        <WebView x:Name="webViewTweet"></WebView>
    </Grid>
    
</Page>

そして、つぶやきたいタイミングでWebviewにNavigateします。

string url = "http://garicchi.com";
string hashtag = "hashtag";
string text = "hogehoge";
string urlStr = Uri.EscapeUriString("https://twitter.com/intent/tweet?" + "text=" + text + "&hashtags=" + hashtag + "&url=" + url);

Uri shareUri = new Uri(urlStr, UriKind.Absolute);

webViewTweet.Navigate(shareUri);

これだけで簡単につぶやくことができます。

f:id:garicchi:20140522210525p:plain

WindowsPhoneもばっちりです。

f:id:garicchi:20140522210537p:plain

アプリにWebViewなんて配置したらUIがくずれるよ!って人は、Flyoutを使うことでもっと簡単にできます。 FlyoutとWebViewをC#から動的につくって、Buttonを押したらFlyoutを表示させればできます。

string url = "http://garicchi.com";
string hashtag = "hashtag";
string text = "hogehoge";
string urlStr = Uri.EscapeUriString("https://twitter.com/intent/tweet?" + "text=" + text + "&hashtags=" + hashtag + "&url=" + url);

Uri shareUri = new Uri(urlStr, UriKind.Absolute);

var flyout = new Flyout();
flyout.Placement = FlyoutPlacementMode.Full;
var webView = new WebView();
webView.Navigate(shareUri);
flyout.Content = webView;

buttonFlyout.Flyout = flyout;

f:id:garicchi:20140522210713p:plain