출처: https://developers.google.com/app-indexing/webmasters/app?hl=ko
사용자가 Google 검색결과에서 앱으로 들어올수 있는 방법을 구현하는것
<activity android:name="com.example.android.GizmosActivity" android:label="@string/title_gizmos" > <intent-filter android:label="@string/filter_title_viewgizmos"> <action android:name="android.intent.action.VIEW" /> <!-- Accepts URIs that begin with "http://example.com/gizmos” --> <data android:scheme="http" android:host="example.com" android:pathPrefix="/gizmos" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> </intent-filter> </activity>
참고
https://developers.google.com/app-indexing/webmasters/app?hl=ko
앱에 딥 링크 추가
Google이 앱의 콘텐츠를 색인 생성하려면 (그리고 사용자가 Google 검색결과에서 앱으로 들어오려면)
앱 안에 있는 특정 콘텐츠에 접근하는 방법을 정의하는 앱 매니페스트에 인텐트 필터를 지정해야 합니다.
앱 콘텐츠에 딥 링크를 지정하는 방법은 다음과 같습니다.
- Google 검색결과에서 실행 가능한 액티비티에 대하여 한 개 이상의 <intent-filter> 요소를 Android 매니페스트 파일에서 추가합니다.
- ACTION_VIEW 인텐트 액션을 지정하는 <action> 태그를 추가합니다.
- 액티비티가 허용하는 각 데이터 URI 형식에 <data> 태그를 추가합니다. 이는 딥 링크에 대한 형식을 지정하는 기본 메커니즘입니다.
- BROWSABLE 및 DEFAULT 인텐트 카테고리 모두에 <category>를 추가합니다.
- BROWSABLE은 인텐트를 웹 브라우저에서 실행하기 위해 필요합니다. 이 카테고리가 없으면 브라우저에서 링크를 클릭하여도 앱으로 이동할 수 없으며 현재의 웹 브라우저만 URL에 응답합니다.
- DEFAULT는 Google 검색결과에서 앱에 딥 링크를 제공하는 데에만 관심이 있는 경우에는 필요하지 않습니다. 하지만 사용자가 내 웹사이트를 가리키는 다른 모든 웹페이지에서 링크를 클릭했을 때 내 Android 앱이 응답하기를 바라는 경우에는 DEFAULT 카테고리가 필요합니다. Google 검색결과에서 사용되는 인텐트는 내 앱의 ID를 포함하므로 인텐트가 명시적으로 내 앱을 수신자로 가리키는 반면 내 사이트로 연결되는 다른 링크는 앱 ID를 모르므로 DEFAULT 카테고리가 암시적 인텐트를 수락함을 알린다는 점에서 차이가 납니다.
예를 들어 다음 액티비티는 사용자가 그 외 관심 분야에 대한 정보를 보기 위하여 인텐트를 사용하여 앱에 들어오도록 허용합니다.
인텐트 필터는 액티비티에서 다음과 같이 시작하는 URI가 포함된 VIEW 액션 인텐트에 응답하도록 선언합니다.
http://example.com/gizmos:
<activity android:name="com.example.android.GizmosActivity"
android:label="@string/title_gizmos" >
<intent-filter android:label="@string/filter_title_viewgizmos">
<action android:name="android.intent.action.VIEW" />
<!-- Accepts URIs that begin with "http://example.com/gizmos” -->
<data android:scheme="http"
android:host="example.com"
android:pathPrefix="/gizmos" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
이 예에서는 앱이 다음과 같은 딥 링크에 응답합니다. http://example.com/gizmos?1234
, http://example.com/gizmos/1234
, http://example.com/gizmos/toys/1234
등
인텐트 필터의 <data> 요소는 최소한 android:scheme 속성을 제공해야 합니다. 그런 다음 속성을 더 추가하여 액티비티에서 수락하는 URI 유형을 더 세분화할 수 있습니다. 예를 들어 비슷한 URI를 수락하는 여러 액티비티를 가지고 있지만 액티비티에서 단지 경로명을 기반으로 해야만 구분할 수 있는 경우에는 path, pathPattern, pathPrefix 속성을 추가하여 시스템이 다른 URI 경로를 열어야 하는 액티비티를 구분할 수 있습니다.
위 예는 사용자가 그러한 링크를 클릭했을 때 웹페이지 대신 내가 만든 앱을 열 수 있도록 하는 웹페이지 URL과 일치하도록 의도된 URI 형식을 보여줍니다.
Android URI에 대한 단순화된 형식을 원하면 example://gizmos와 같은 대체 데이터 URI 형식을 만들 수 있습니다.
예를 들어 다음은 위에서 http://example.com/gizmos와 example://gizmos 두 유형 모두를 지원하는 동일한 인텐트 필터입니다.
<activity
android:name="com.example.android.GizmosActivity"
android:label="@string/title_gizmos" >
<intent-filter android:label="@string/filter_title_viewgizmos">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "example://gizmos” -->
<data android:scheme="example"
android:host="gizmos" />
</intent-filter>
<intent-filter android:label="@string/filter_title_viewgizmos">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "http://example.com/gizmos” -->
<data android:scheme="http"
android:host="example.com"
android:pathPrefix="/gizmos" />
</intent-filter>
</activity>
이렇게 하면 앱이 example://gizmos?1234
, example://gizmos/1234
, example://gizmos/toys/1234
등과 같은 딥 링크뿐 아니라
위 예와 동일한 http://example.com/gizmos
URL에도 응답합니다.
인텐트 필터가 내 AndroidManifest.xml
에 추가되면 앱은 내 액티비티로 전달되는 데이터를 처리해야 합니다.
자세한 내용은 앱 콘텐츠에 대해 딥 링크 사용 설정에서 확인하세요.
딥 링크 테스트
Android Debug Bridge를 사용하여 딥 링크를 테스트할 수 있습니다.:
adb shell am start -a android.intent.action.VIEW -d "http://example.com/gizmos" com.example.android
adb shell am start -a android.intent.action.VIEW -d "example://gizmos" com.example.android
앱을 새로 설치한 상태에서 테스트하시기 바랍니다.
Google의 딥 링크 테스트 도구를 사용하여 휴대전화에서 딥 링크로 앱 동작을 테스트하세요.
또는 intent://
링크가 있는 HTML페이지를 만들어 브라우저에서 앱의 동작을 테스트할 수도 있습니다.:
<a href="intent://example.com/gizmos#Intent;scheme=http;package=com.example.android;end;">
http://example.com/gizmos</a>
<a href="intent://gizmos#Intent;scheme=example;package=com.example.android;end;">example://gizmos</a>
intent://
URL 사용에 대해 자세히 알아보려면 여기를 방문하세요.
앱 콘텐츠의 다른 부분에 대한 액세스 차단
Google에서 앱의 일부에 대한 색인만 생성하도록 허용하고 싶을 때가 있습니다. Android 앱에 noindex.xml
파일을 포함하여
색인 생성되어서는 안 되는 딥 링크를 지정함으로써 이를 Google에 알릴 수 있습니다.
제외할 URI 목록이나 URI 접두사의 목록을 지정할 수 있습니다.
이는 웹사이트에 대한 robots noindex 메타태그 작동 방식과 비슷합니다.
먼저 앱의 XML 리소스 디렉토리에서 새로운 XML 파일, res/xml/noindex.xml
을 생성하세요.
파일은 다음과 같이 표시됩니다.
<?xml version="1.0" encoding="utf-8"?>
<search-engine xmlns:android="http://schemas.android.com/apk/res/android">
<noindex uri="http://example.com/gizmos/hidden_uri"/>
<noindex uriPrefix="http://example.com/gizmos/hidden_prefix"/>
<noindex uri="gizmos://hidden_path"/>
<noindex uriPrefix="gizmos://hidden_prefix"/>
</search-engine>
uri
속성과 정확하게 일치하는 딥 링크나 uriPrefix
속성과 일치하는 문자열로 시작하는 딥 링크는 색인 생성이 되지 않습니다.
noindex.xml
파일이 추가된 후에는 앱의 AndroidManifest.xml 파일의 application
섹션에서 참조되어야 합니다. 예를 들면 다음과 같습니다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.Gizmos">
<application>
<activity android:name="com.example.android.GizmosActivity"
android:label="@string/title_gizmos" >
<intent-filter android:label="@string/filter_title_viewgizmos">
<action android:name="android.intent.action.VIEW"/>
...
</activity>
<meta-data android:name="search-engine" android:resource="@xml/noindex"/>
</application>
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
<meta-data android:name="search-engine" android:resource="@xml/noindex"/>
는 noindex.xml
파일이 앱에서 발견될 수 있는 위치를 지정합니다.
지속적으로 앱의 색인을 생성하려면 Google Play 스토어에 게시된 모든 버전의 앱에 동일한
다음으로 웹사이트에 앱을 연결하여 Google이 내 앱이 내 웹사이트의 공식 앱임을 알 수 있도록 해야 합니다.
'IT_Programming > Android_Java' 카테고리의 다른 글
JNI Local Reference Changes in ICS ( ICS 부터 바뀌는 JNI Local Reference ) (0) | 2015.06.05 |
---|---|
Android property animation (0) | 2015.06.01 |
[펌][번역] Toolbar에 13줄로 SearchView을 구현한다 (0) | 2015.05.21 |
[펌] 컨텐트 프로바이더 기초 (Content Provider Basics) (0) | 2015.05.18 |
Split Action Bar for Android 4 (0) | 2015.05.16 |