メモ2ブログ

メモtoウェブログ。旧ブログはこちら。 http://sakebook.blogspot.jp/

Instagramのユーザページと詳細ページへ暗黙的Intentで遷移する。

普段アプリで表示しているであろうページに、ブラウザで表示する場合があります。

ブラウザアプリを作っていて、何もしないままだとWebページが表示してしまうので、普段表示している方であるアプリへ遷移させます。

Instagram

ユーザページと詳細ページを表示する時に、Instagramのアプリで表示できるようにします。

Instagramがリダイレクトを行い、ログインなどを除けば最終的に上のURLになります。 検索ページはログインしていないとうまくリダイレクトされない場合があります。

ユーザページはそのままのURLだと、Instagramアプリが反応してくれません。 ユーザページをInstagramアプリで開くときは、パスに_uを挟む必要があります。 つまり、ユーザページは次のようになります。

コード

this.packageName()にはcom.instagram.android

this.url()にはhttps://www.instagram.com/が入っています。

    public void instagram(Activity activity, String url) throws ActivityNotFoundException {
        Intent toInstagram = new Intent();
        toInstagram.setAction(Intent.ACTION_VIEW);
        toInstagram.setPackage(this.packageName());

        Uri uri = Uri.parse(url);
        List<String> paths =uri.getPathSegments();
        switch (paths.size()) {
            case 1:
                String profile = this.url()+ "_u/" + paths.get(0);
                toInstagram.setData(Uri.parse(profile));
                break;
            default:
                toInstagram.setData(uri);
                break;
        }
        activity.startActivity(toInstagram);
    }

URLのpathを取得して、一つしかpathがない場合にURLをInstagramアプリが反応できるユーザページに置き換えています。

このコードだと、URLが

  • https://www.instagram.com/
  • https://www.instagram.com/accounts/login/?next=/explore/

などの場合にActivityNotfoundExceptionを投げるので適切にハンドリングしてください。

また、https://www.instagram.com/explore/のときは、exploreという存在しないユーザページに遷移するので、特殊な処理を入れてもいいかもしれません。

注意

Instagramのバージョンは7.20.0, 検証した日は2016/4/10のものですので、仕様変更やアプリのバージョンによっては思った通りに動かない場合もあるのでご了承ください。

以前紹介した方法の方が、変更には強いです。

sakebook.hatenablog.com

素直なURLでInstagramのアプリで開けないということは、開いて欲しくない、もしくは無くしていく方針なのかもしれません。

以上。

参考

Intent to open Instagram user profile on Android / StackOverFlow

open instagram user profile / StackOverFlow