Android 網頁開啟App進入對應頁面

Merbng發表於2019-04-10

場景

產品中有個功能是分享,使用者點選分享的連結可開啟app(若沒有下載,跳轉應用寶下載),進入相應的頁面。

程式碼

一般會在閃屏頁新增以下程式碼(程式的入口) 在AndroidManifest.xml

<activity
            android:name=".mvvm.splash.adsplash.AdSplashActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:screenOrientation="portrait"
            android:theme="@style/SplashTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
=======這裡是新增的程式碼 start======
            <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="ylbb"/>
            </intent-filter>
=======這裡是新增的程式碼 end=======
        </activity>
複製程式碼

接下來,在AdSplashActivity中接收並處理傳過來的引數,在onCreate中。

class AdSplashActivity : BaseActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
//        網頁開啟app 進入測評 詳情
        if (intent.data.checkNotNull()) {
            var productId = intent.data.getQuery()
            if (productId.checkNotNull()) {
              //這裡寫邏輯處理
            }
        }
}
}
複製程式碼

跟h5協商好對應的引數欄位

<html>
<meta charset="UTF-8">
   <body>
     <h1>Test Scheme</h1> <!--自動載入隱藏頁面跳轉-->
      <!--手動點選跳轉-->
      <a href="ylbb://ceping:productId?666">點選開啟APP並將值傳過去</a>
   </body>
</html>
複製程式碼

補充

  • 若網頁定義為:ylbb://ylbb.com:80/params?p=6&id=7
       Intent intent = getIntent();
		String scheme = intent.getScheme();// ylbb
		Uri uri = intent.getData();
		
		if (uri != null) {
			String host = uri.getHost();//ylbb.com
			String dataString = intent.getDataString();//ylbb://ylbb.com:80/params?p=6&id=7
			String id = uri.getQueryParameter("id");//7
			String path = uri.getPath();///params
			String path1 = uri.getEncodedPath();//params
			String queryString = uri.getQuery();//p=6&id=7
        }
複製程式碼
  • getIntent.getData()null,可能是在其他Activity新增的scheme
  • 一般新增在閃屏頁(app啟動一些初始化操作都在這裡進行),但是接收到資料可暫時儲存下來,在閃屏頁過後再去處理(如:MainActivity

參考連結:

相關文章