はじめに

この記事は「みんコミ Advent Calendar」の9日目の記事です。

みんコミ」のAndroidアプリ(バージョン1.0.2)をベースに執筆しています。スクリーンショットは極力控える方針ですので、本記事を読む際には、「Google Play Store」からアプリをインストールしておくことをお勧めします。

en_generic_rgb_wo_60


外部リンクのクリック

「みんコミ」は、SNSでの口コミを重視しているようです。

実際、Twitterの#みんコミを見ると、読者がコミックの感想を寄せていたり、作者の人たちが作品を宣伝していたりします。

その際に、作品ページへのリンクも投稿されているのですが、Android端末でそれらのリンクをタップして開くWeb版の「みんコミ」は、AndroidやiOSのブラウザからは見られないように制限されています。

数秒後にGoogle Play Storeへリダイレクトされる

数秒後にGoogle Play Storeへリダイレクトされる

残念なのは、Android版の「みんコミ」アプリをインストールしていても、やはりリンクをクリックするとブラウザが開いてしまうと言うことです。

AndroidにはIntentという便利な仕組みがあります。

Intentを使えば、リンクをクリックしたときにどのアプリで選ぶかをユーザーに選択肢として提示でき、SNSのリンクから、そのままアプリを起動してコンテンツに誘導できます。

AndroidManifest.xml

Intentに関する情報はAndroidManifest.xmlに記載します。

<?xml version="1.0" encoding="utf-8"?>
<manifest
    package="io.keiji.mincomisample"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
        </activity>
        <activity
            android:name=".SettingActivity"
            android:label="その他">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity
            android:name=".TitleActivity"
            android:label="タイトルページ">
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>

                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>

                <data
                    android:host="www.mincomi.jp"
                    android:pathPattern="/?title=.*"
                    android:pathPrefix="/title"
                    android:scheme="http"/>

                <data
                    android:host="www.mincomi.jp"
                    android:pathPattern="/?title=.*"
                    android:pathPrefix="/title"
                    android:scheme="https"/>
            </intent-filter>
        </activity>
        <activity
            android:name=".AuthorActivity"
            android:label="著者ページ">
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>

                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>

                <data
                    android:host="www.mincomi.jp"
                    android:pathPattern="/?author=.*"
                    android:pathPrefix="/author"
                    android:scheme="http"/>

                <data
                    android:host="www.mincomi.jp"
                    android:pathPattern="/?author=.*"
                    android:pathPrefix="/author"
                    android:scheme="https"/>
            </intent-filter>
        </activity>
    </application>

</manifest>

作品タイトルを開くのはTitleActivity、著者ページはAuthorActivityが、それぞれ担当します。

dataタグのhostに、アプリが受け取るURLに関する情報を記述しています。なお、schemeはhttphttps両方をハンドリングできるようにしてあります。

このアプリをインストールした状態で、再びTwitterなどで「みんコミ」のリンクをクリックします。

すると、次のように起動するアプリの選択画面が表示されます。

device-2015-12-07-225455

ここで「タイトルページ」を選択すると、サンプルアプリが起動します。

画面にはtitleIdやauthorIdとしてクリックしたリンクの最後にある数字が表示されます。

device-2015-12-07-225106

device-2015-12-07-225040

Intentの処理

プログラム側を見てみましょう。ユーザーがクリックしたURLは、アプリのActivity側からはIntentの形で受け取ります。

今回の場合はgetQueryParameterでtitleauthorの値を取得します。

    private void processIntent(Intent intent, TextView textView) {

        Uri uri = intent.getData();
        String authorId = uri.getQueryParameter("author");

        textView.setText("authorId = " + authorId);
    }

実際には、これらの値をもとに、タイトルの詳細や著者の詳細を表示することになるでしょう。

ただし、Intentで外部からのリンクを受け付けるときには、アプリ自体のセキュリティ設計に注意して下さい。データの更新を伴うIntentの場合、不正なリンクを送り込まれてデータを破壊されたり、ContentProviderなどで設計に不備があると、アプリの情報が不正に利用されたりする可能性があります。

サンプルプロジェクトをGitHubに置いておきます。

https://github.com/keiji/adventcalendar_2015_mincomi


「有山圭二」は「みんなのコミック」及び運営の「株式会社イーブックイニシアティブジャパン」とは一切関係がありません。
また、本アドベントカレンダーの内容はあくまで参加者個人の見解です。
「みんなのコミック」の評価を目的とするものではありませんので、ご了承下さい。

みんコミといえば、僕が普段からお世話になっている根雪れい(@neyuki_rei)さんも連載していますね。

根雪さんの「おかあさん(10)と僕。」は……[TODO: 更新されたら感想を書く]

そしてもう一つ、「みんコミ」で気になる作品を紹介します。

ロリコンの神職(社会職業的な意味で)が、ケモミミ幼女とキスしたら子供に戻ってしまって……という話のようです。

何を言っているのか自分でもよくわかりませんが、みんコミってそんな感じの作品が多いです。

ただ、残念なのはこの作者さん、Twitterアカウントを見ると、大変良い眼鏡っ娘を描く人だとわかります。

にも関わらず、この「こどもチェンジ」では第1話に眼鏡っ娘が出てこないという……一体どこで何を間違ったらそうなるのかと問い詰めたくなります。

しかし、カラーの見開き扉絵にはきちんと眼鏡っ娘が出ることが予告されているので、大いに期待したいところです。


それでは明日10日の担当は、眼鏡はどんな格好にも似合うけど、ケモミミ眼鏡だけはどうしても認められない「有山圭二」さんです。

よろしくお願いします。