Instagramのユーザページと詳細ページへ暗黙的Intentで遷移する。
普段アプリで表示しているであろうページに、ブラウザで表示する場合があります。
ブラウザアプリを作っていて、何もしないままだとWebページが表示してしまうので、普段表示している方であるアプリへ遷移させます。
ユーザページと詳細ページを表示する時に、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
のものですので、仕様変更やアプリのバージョンによっては思った通りに動かない場合もあるのでご了承ください。
以前紹介した方法の方が、変更には強いです。
素直なURLでInstagramのアプリで開けないということは、開いて欲しくない、もしくは無くしていく方針なのかもしれません。
以上。
参考
Intent to open Instagram user profile on Android / StackOverFlow