programing

Android에서 나만의 URI 체계를 구현하는 방법

abcjava 2023. 8. 9. 20:25
반응형

Android에서 나만의 URI 체계를 구현하는 방법

예를 들어 다음과 같은 URI를 정의하려고 합니다.

myapp://path/to/what/i/want?d=This%20is%20a%20test

내 애플리케이션 또는 서비스에서 처리해야 합니다.이 계획은 다음과 같습니다."myapp"그리고 아닌"http"또는"ftp"그것이 바로 제가 의도하는 바입니다: 안드로이드 OS를 위해 제 자신의 URI 스키마를 글로벌하게 정의하는 것입니다.이것이 가능합니까?

이것은 스카이프와 같은 윈도우 시스템과 같은 일부 프로그램이 이미 수행하고 있는 것과 다소 유사합니다.skype://) 또는 토렌트 다운로더 프로그램(torrent://).

이것은 매우 가능한 일입니다. 요소를 사용하여 AndroidManifest.xml에서 URI 체계를 정의합니다.의도 필터를 설정한 경우<data>요소를 입력하면 사용자가 직접 구성표를 만들 수 있습니다. (의도 필터의도 해결에 대한 자세한 내용은 여기를 참조하십시오.)

다음은 간단한 예입니다.

<activity android:name=".MyUriActivity">
    <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="myapp" android:host="path" />
    </intent-filter>
</activity>

암시적 의도가 작동하는 방식에 따라 적어도 하나의 동작과 하나의 범주도 정의해야 합니다. 여기서 저는 행동으로 VIEW를 선택했고(무엇이든 될 수 있지만), DEFAULT 범주를 추가해야 합니다(모든 암시적 의도에 필요하기 때문에).또한 제가 BROOWSABLE 범주를 추가한 방법에 주목하십시오. 이것은 필요하지 않지만 브라우저에서 URI를 열 수 있게 해줄 것입니다(유효한 기능).

@DanielLew 답변을 보완하여 매개변수 값을 가져오려면 다음 작업을 수행해야 합니다.

URI 예:myapp://path/to/what/i/want?keyOne=valueOne&keyTwo=valueTwo

활동 중:

Intent intent = getIntent();
if (Intent.ACTION_VIEW.equals(intent.getAction())) {
  Uri uri = intent.getData();
  String valueOne = uri.getQueryParameter("keyOne");
  String valueTwo = uri.getQueryParameter("keyTwo");
}

독자적인 계획을 정의하지 않는 것이 좋습니다.이는 여러 엔티티 간의 이름 충돌을 방지하기 위해 정당한 이유로 이러한 이름을 엄격하게 제어하려는 URI 체계에 대한 웹 표준에 위배됩니다.웹 사이트에서 구성표에 대한 링크를 작성하면 전체 인터넷 네임스페이스에 해당 작은 이름을 입력한 후에는 이러한 표준을 따라야 합니다.

자신의 앱에 대한 링크를 원하는 경우 여기서 설명한 접근 방식을 따르는 것이 좋습니다.

Android OS에서 브라우저에서 URL을 호출하여 프로그램에 액세스하기 위한 일부 URL 네임스페이스(myapp://app.start/)를 등록하는 방법은 무엇입니까?

몇 년 전에 질문했듯이, Android는 이 URI 계획에서 많이 발전했습니다.
원래의 URI 방식에서 딥 링크, 그리고 지금은 안드로이드 앱 링크까지.

Android는 이제 사용자 자신의 URI 방식을 정의하는 것이 아니라 HTTP URL을 사용할 것을 권장합니다.Android App Links는 사용자가 소유한 웹 사이트 도메인에 연결되는 HTTP URL을 사용하므로 다른 앱은 사용자의 링크를 사용할 수 없습니다.딥링크와 안드로이드 앱 링크의 비교는 여기서 확인할 수 있습니다.

이제 Android Studio 옵션을 사용하여 URI 구성표를 쉽게 추가할 수 있습니다.도구 > App Links Assistant.자세한 내용은 Android 문서 https://developer.android.com/studio/write/app-link-indexing.html 를 참조하십시오. https://developer.android.com/studio/write/app-link-indexing.html

Diego의 또 다른 대안은 라이브러리를 사용하는 것입니다.

https://github.com/airbnb/DeepLinkDispatch

다음과 같이 활동에 대한 주석을 통해 처리할 URI와 추출할 매개 변수를 쉽게 선언할 수 있습니다.

@DeepLink("path/to/what/i/want")
public class SomeActivity extends Activity {
  ...
}

또한 쿼리 매개변수도 활동에 전달됩니다.

언급URL : https://stackoverflow.com/questions/2448213/how-to-implement-my-very-own-uri-scheme-on-android

반응형