2016-08-04 20 views
3

AndroidとiOSでcustom URL schemeを実装しました。これはユーザーに「有効化」メールを送信するという考えでネイティブアプリを生み出すリンクをクリックするそれがうまく動作しますが、Android上で、それが動作しないiOSではアンドロイドのGmailでカスタムURLスキームまたはインテント:// URLを開くことができません

<a href="myapp://activate/accountId/uniquetoken">Click to activate</a> 

は技術的には、我々のようなリンクを電子メールでフォーマットされたHTMLを送信します。

アンドロイド自身がcustom URL schemeを処理しなければならない他のいくつかのS.O投稿や類似のものを見たことがありますが、これらのカスタムを取り除くChromeブラウザとGmailアプリケーションであることを示していますmyapp:// URLがありません。

これらの投稿のアドバイスに従って、私は意図のURLを作成しようとしました。私は次のすべてを試しました

intent://activate#Intent;scheme=myapp;package=com.mycompany.myapp;end 

#Intent;action=activate;end 

#Intent;component=com.mycompany.myapp/.ui.MainActivity;end 

intent://#Intent;component=com.mycompany.myapp/.ui.MainActivity;end 

しかし、どれも働いていませんでした。アンドロイド6のアンドロイドアプリのGMail内からクリック可能なものはありませんでした。意図したウイリアムのフォーマットに関するアンドロイドの文書は信じられないほど詳しく書かれていません。私は見つけることができる最高のは、「プログラム的にそれに.toUriを呼び出し、Javaで自分の意図を作成する」であるすべてのヘルプははるかに高く評価されるだろう

(Iが生成する方法であるURIが上記だ壊れた意図のほとんど)


アップデート1はここでマニフェストのAndroidからの私の活動との意図だ

<activity android:name=".ui.MainActivity" android:theme="@style/AppTheme.NoActionBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 

     <!-- load via URL scheme --> 
     <intent-filter> 
      <data android:scheme="myapp" /> 
      <action android:name="android.intent.action.VIEW" /> 
      <category android:name="android.intent.category.BROWSABLE" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 
私は戻ってカスタムアプリケーションスキームに「反映」ウェブサーバを、設定しようとした

、これは両方のAndroidのための作業を行いますとiOS

は、Webブラウザ(Chrome for Androidのは)それは(種類の)ソリューションを提供して、起動するネイティブアプリを引き起こし、このリダイレクトを、以下の

myapp://activate/accountId/uniqueToken 

にリダイレクトしないページ0

<a href="http://mycloudserver.net/myapp/activate/accountId/uniqueToken">Click</a> 

アンドロイドアプリ向けGmailの

これはクラウドサーバに人為的な依存関係を持ちますが、これは避けるのがよいでしょう。

iOSでは、Safariブラウザにも空のページが残っていますが、これは軽微ですが残念です。

+0

'myapp:// activate/accountId/uniqueToken'の場合は、あなたのIntentに完全パスを入れるか、少なくともAndroidManifest.xmlの' intent-filter'のパスに十分に入れる必要があります'それを特定することができます。 urlスキームを扱う 'AndroidManifest.xml'の' intent-filter'を貼り付けることができますか? – nicobatu

答えて

2

あなたが発見したように、これに対する完璧な解決策はありません。カスタムURLスキームはクリック可能なリンクとして認識されないことが多く、iOS、Android、Chromeには許可されるルールに関するルールが異なります。これは特定の状況での問題ではありませんが、アプリがインストールされていないデバイスを扱う便利な方法もありません。

これを達成するためには、実際に雲の宛先を経由するルーティングが唯一の信頼できる方法であり、Branch.ioでは、あなたがまとめたものと同様のソリューションを使用します。ユニバーサルリンク(iOS 9以降)、URLスキーム(iOS < 8、基本Android)、App Links(新しいAndroid)、Chrome Intents(AndroidのChrome)を組み合わせるスマートリダイレクトのクラウド宛先を使用すると、状況の大部分が出てくるだろう。副次的な利点は、上記の方法のすべてが失敗した場合、クラウドの宛先にコンテンツが表示されるため、アプリなしでデバイスを処理する方法もあることです。 iOSでは、アプリが起動した後に最終的なリダイレクトを開始することもあり、空白の画面が残ることはありませんが、これはすべての状況で機能するわけではありません。

ちなみに上記は、ブランチが無料サービスとして提供しているものです。あなたは一見を与えるかもしれません!

関連する問題