2022년 10월 10일 월요일

Deeplink이해하기

Deeplink이해하기

Deeplink이해하기

하이퍼링크 http는 웹주소를 연결하는 sheme로서 무조건 인터넷웹사이트가 열리도록 약속한거다.

deeplink는 이름처럼 좀더 깊은 곳까지 링크시켜 해당자료가 열리도록 하는거다.

안드로이드/아이폰 에서는 http://가 아닌 abcde://등으로 개발자맘대로 정하기만 하면 누군가 abcd:// 링크를 여는순간 개발자의 앱이 열리도록 할수 있다.

안드로이드에서는 Activity 선언에 intent(의도,의지)-filter 태그를 통해서 해당 액티비티를 외부에서 바로가기 링크등을 통해서 바로 앱기동과 액티비티 이동이 가능하도록 할수 있다.

 <activity

    android:name=".MainActivity1">

       <intent-filter>

        <category android:name="android.intent.category.DEFAULT" />

        <category android:name="android.intent.category.BROWSABLE" />

        <action android:name="android.intent.action.VIEW" />

        <data android:scheme="testapp" android:host="main" />

    </intent-filter>

  </activity>

   <activity

    android:name=".MainActivity2">

       <intent-filter>

        <data android:scheme="testapp" android:host="info"/>

    <data android:scheme="https" android:host="myapp.com" android:pathPattern="/detail.*" />

    </intent-filter>

  </activity>

testapp://main 과 testapp://info 에 대한 딥링크를 정의했으니, 여기저기 광고할때에 이들 딥링크를 이용하여 사용자들이 앱을 이용할수 있도록 할수 있다.

하나의 액티비티에 여러개의 딥링크를 지정할수도 있다.

android:pathPatterndms 속성을 통해서 특정 단어가 들어가는 링크만 받을수도있다.

외부에서 링크를 testapp://info?myid1=1100

        ...

        Intent intent = getIntent();

        Uri data = intent.getData();

        if (data != null) {

            String data1= data.getQueryParameter("myid1"); 

             //String data2= data.getQueryParameter("key2");

        }

        ...

테스트 할때는 adb에서 직접할수도있다.

adb shell am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d “testpp://info? myid 1=value1& myid 2=value2”

deeplink 의 scheme는 아무나 정할수 있기 때문에, 같은 scheme라면 어떤 앱이냐고 물어보는 안드로이드대화상자가 나타난다. 그래서 scheme를 자신만의 것으로 하는것도 중요하다.

딥링크를 제공할때 , 사용자가 내가만든 딥링크 testapp://main 의 링크를 클릭했는데, 사용자핸폰에 내 앱이 설치되어있지 않다면 ? 앱설치부터 시켜야한다.

구글 마켓에서 그걸 지원하는데,

Android의 defer deeplink 라고 하고 Google Play Install Referrer라고 합니다. 이 기능은 Android에서 Android 마켓인 Google Play Store를 통해 공식적으로 지원한다 .

Firebase Dynamic Link 를 쓰면 deferer 딥링크도 지원해주고, 아주 편리하다.

Deeplink를 android studio 에서 실행테스트하기

deeplink, 즉 외부에서 우리 앱까지 link를 타고 들어올때 광고계측을 하기위해서 우리쪽에서 어떤 딥링크인지 판단하고 싶을때가 있는데, 이러한 상황을 가상으로 구현해 볼수 있다.

android Studio에서 Run > Edit Configurations

해서

Launch -> URL(또는 deeplink?) -> 주소란에 tutsplus://deeplink

물론 사전에 소스에서 인텐트필터로 위의 주소로 왔을떄 받아들일 준비를 해야한다.

    <activity android:name="com.example.matthew.deeplinks.LinkActivity" android:label="@string/title_activity_link"

        android:theme="@style/AppTheme.NoActionBar">

        <intent-filter>

            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.BROWSABLE" />

            <category android:name="android.intent.category.DEFAULT" />

            <!-- URI tutsplus://deeplink -->

            <data android:scheme="tutsplus" android:host="deeplink"/>

            <!-- URI https://www.mydeeplink.com -->

            <data android:scheme="http" android:host="www.mydeeplink.com"/>

        </intent-filter>

    </activity>

그리고 title_activity_link 에서는

 Intent in = getIntent();

Uri data = in.getData(); 

String x;

String y;

if (uri != null) {

  x = data.getQueryParameter("x"); // x = "1.2"

  y = data.getQueryParameter("y"); // y = "3.4"

}

또는

String deeplinkUrl = in.getDataString();

하면 딥링크를통해 왔는지 알수 있다.

0 comments:

댓글 쓰기