2011-02-10 17 views
13

私は電子メールで送信できるリンクを作成しようとしています。私のアプリをインストールしたアンドロイドデバイスで開くと、自動的に正しいページが開きます。Androidアプリへのディープリンク

私はいくつかの異なる方法で部分的に作業していますが、誰かが解決策を持っているかどうか疑問に思っていたいくつかの問題を発見しました。

試行1:カスタムスキームの使用:myapp:// someItem。これは動作しますが、一部の電子メールアプリケーションではhttpではないため、リンクとして扱われません。アプリケーションに有効なリンクとして扱わせる方法はありますか?例えばgmail。

試行2:ホストとのhttpリンクの使用:http://com.myapp/someItem。これも同様に動作しますが、私のアプリケーションは理想的ではないすべてのhttpリンクを処理するために登録されてしまいます。

試行3:ホストとポートでhttpリンクを使用する:http://com.myapp:2345/someItem。これは私の現在の解決策であり、唯一の欠点は、リンクが開かれてもブラウザ内のリンクを開くオプションが残っていることです。ブラウザがリンクを開こうとするのを止める方法はありますか?

リンクを作成する方法は誰もが知っていますが、それらのリンクはすべてのアプリケーションでリンクとして扱われ、ブラウザを開いたときにブラウザによって無視されますか?

+0

あなたは私を助けいくつかのリソースに私をポイントしてくださいすることができディープリンクは任意のプロンプト、間質ページ、またはログインせずに、コンテンツに直接ユーザーを取る必要があります。 – user2056563

答えて

4

は、この技術は、実際に私が言うことができるものから、Android上で動作しているようだ:

http://mobile.dzone.com/news/custom-url-schemes-phonegap

私はそれを試していません実際のプロダクションアプリでは、あなたの走行距離は異なる場合があります。私が行ったことは、隠されたiframeを作成し、カスタムurlスキームに位置を設定しようとし、ドキュメントのonloadから関数を呼び出すというテクニックを使用することです。これまで見たことは(私は2.2と2.3のデバイスでしかテストしていませんでした)、カスタムスキームを処理するアプリがインストールされていればアプリが起動し、そうでない場合はページがレンダリングされます。

URLを比較的シンプルにして、両方のケースをカバーし、URLのTwitter共有のようなものを壊すことはありません。実際のプロダクションバージョンでは、非互換のデスクトップ動作のリスクを軽減するために、アプリケーションをサポートするプラットフォームのようなものからリクエストが来た場合にのみ、隠れたiframeプローブを実行することがあります。

+1

私は90%働いています。私が好きでないのは、ブラウザにページを残すことだけです。私は成功のために1ページ戻って、それがダウンロードリンクを表示するのに失敗したところに留まることを望みます。リダイレクトが機能するかどうかを確認する方法はありますか? – skorulis

+1

申し訳ありませんが、私は歴史とそのようなもののために最適化するのに十分なことをだまされず、基本をテストしました。通常、ブラウザにページを残して問題を処理するために、ヒストリフラグをつけて起動することができます。しかし、「何か他のもの」がそれを開始しているので、私はあなたが修正を見つけることについてどうやって行くのか分かりません。がんばろう!基本は少なくとも楽しいです。 – mikerowehl

0

サーバーサイドで何かを使用できるのであれば、訪問時にカスタムスキームのリンクにジャンプする通常のページを持つことができますか?これには、アプリケーションがインストールされていないかどうかを確認し、インストールを促すという追加の利点があります。

ただし、ブラウザで開いているリンクの問題は修正されません。私が考えることができる唯一の真の解決策は、適切なアプリケーションにジャンプするリンクハンドラです。そして、問題のユーザーが優先ブラウザを変更できるようにすることでしょう...

+0

アプリケーションがインストールされている場合、ブラウザからどのようにチェックするのですか? – skorulis

+0

ああ、私はそれについて考えなかった。簡単な方法があれば分かりません。少なくとも、リンク先ページが可能です。 ;編集:アプリケーションでHTTPサーバーサービスを実行してからアプリケーションの存在を検出することができますか?それは私が現時点で思いつくことができるすべてについてです。 –

4

あなたの質問にお答えするために、以下はマニフェストのサンプルインテントフィルタです。いくつかのいずれかがhttp://www.example.com/homeで始まる任意のリンクをクリックしたときに

<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.example.com" 
     android:pathPrefix="/home" 
     android:scheme="https"/> 
</intent-filter> 

だから基本的には、彼/彼女はブラウザのアプリと一緒にあなたのアプリでそれを開くためのオプションが与えられます。 アクティビティのインテントを処理する必要があります

また、スキームは何でも構いませんが、httpスキームはGoogleによって推奨されているため、アプリケーションとブラウザの両方のアプリケーションで逆リンクされたURLのクリックを聞くことができます。

注:アプリリンクが必要な場合は、ウェブページにandroid-app:// yourpackage name/http/www.example.com/home/...を追加することを忘れないでください。 「どのようにコンテンツAppのディープリンクを有効にする」 - -

1
1:-set Custom URL schemes like http://example.com. 
    For example, the URL http://example.com/?id=95 , 
    will open up the relevant FAQ and the URL 
    http://example.com/?sectionid=8 
    (where sectionid is the publish id of any Section), 
    will open up relevant section. 
2:- <activity android:name="com.example.shilpi.deeplinkingsample.DeepLinkActivity"> 
      <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:scheme="http" android:host="example.com"/> 
      </intent-filter> 
     </activity> 
3:-   @Override 
      protected void onResume() { 
       super.onResume(); 

       Intent in = getIntent(); 
       Uri data = in.getData(); 
       System.out.println("deeplinkingcallback :- "+data); 
      } 
+2

この回答は技術的には正しいかもしれませんが、それが何をしているのかを説明して答えを埋める価値があります。これは、OPと将来の訪問者の両方に役立ちます。それはそのままで、これは単なるコードダンプです。 – Bugs

関連する問題