プッシュ通知からアプリ内の特定のviewを開く(Android)

プッシュ通知による起動から離脱させない方法

通常、プッシュ通知よる起動ではアプリのTOPが開きます。ユーザーはプッシュ通知の文言に惹かれて起動したのにも関わらず、該当箇所を探すのに手間取り、そのまま離脱につながってしまうことがあります。離脱率の低下を防ぐため、プッシュ通知からアプリTOPではなく、任意の場所に直結した導線を張りましょう。

(例)

・新着記事のプッシュ通知から、該当記事に遷移させたい。
・セール情報のプッシュ通知から、セール商品特集ページに遷移させたい。
・新キャラ追加のプッシュ通知から、ガチャページに遷移させたい。

設定方法を以下にてご説明させて頂きます。

プッシュ通知にURLを添えて開く方法

Growth Pushのプッシュ通知には、カスタムフィールドという形で、ユーザーに表示されるメッセージ以外のデータを添えることが可能です。

このデータにWebページのURLを添えることで、プッシュ通知を開いたユーザーにそのURLのWebページを即座に見せることが可能です。

Androidで、プッシュ通知ごとにURLを指定して、アプリ起動時に開く方法

このURLの代わりにアプリ内の特定の画面を識別するIDを指定することで、プッシュ通知からアプリ内の特定の画面を開くことも可能です。

プッシュ通知からカスタムフィールドのデータの受け取り

GrowthPush.getInstance().setReceiveHandler(new DefaultReceiveHandler(new DefaultReceiveHandler.Callback() {
	@Override
	public void onOpen(Context context, Intent intent) {
		String url = intent.getExtras().getString("url");
		if (url == null) {
			super.onOpen(context, intent);
			return;
		}
          // TODO URLをWebブラウザで開く処理
	}
}));

※setReceiveHandlerはApplicationクラスを継承したクラスのonCreateで実装してください。

URLは上記画像のようにカスタムフィールドで指定して下さい。

画面を開く際の具体的な実装について説明します。

画面を識別するIDにしたがって画面を開く

たとえば、画面を識別するIDとして、独自のURLスキームをもつURLを指定するとします。

myapp://example.com/areas/123 このURLは、エリアのうちID:123の画面へ直接遷移するというURLです。

先のプッシュ通知受信時の処理として、たとえば下記のようなURLのパースと振り分けの処理を実装します。

public boolean openUrl(String url) {
 
    // URLスキームがHTTPの場合は、Webブラウザで開く
    if (url.startsWith("http") || url.startsWith("https")) {
        // TODO HTTPのURLをWebブラウザで開く処理
        return true;
    }
 
    // 独自のURLスキームだった場合
    if (url.startsWith("myapp")) {
       URL urlScheme = new URL(url);
    List<String> pathComponent = new ArrayList<String>();
    Pattern pattern = Pattern.compile("/+([^/]+)");
    Matcher matcher = pattern.matcher(urlScheme.getPath());
    while (matcher.find()) {
           pathComponent.add(matcher.group(1));
       }
 
       if(pathComponent.size() >= 3) {
           int areaId = Integer.valueOf(pathComponent.get(2));
          // TODO 画面を開く処理
       }
       // ...(略)...
 
    }
 
    // ...(略)...
 
    return true;
 
}

具体的な実装については、アプリに依存する部分が多いですが、同様の手法によって、プッシュ通知からアプリ内の特定の画面を開くことが可能です。