카테고리 보관물: Android

Android

Android 브라우저에서 링크를 통해 앱을 시작 하시겠습니까? 언급하고 싶습니다 . 내가

다음과 같은 링크를 만들 수 있습니까?

<a href="anton://useful_info_for_anton_app">click me!</a>

Anton 앱이 시작됩니까?

마켓 프로토콜을 사용하는 Android 마켓 앱에서 작동하지만 다른 앱으로 비슷한 작업을 수행 할 수 있다는 것을 알고 있습니다.

다음은 Android 마켓을 시작하는 링크의 예입니다.

<a href="market://search?q=pname:com.nytimes.android">click me!</a>

업데이트 :
eldarera가 제공 한 답변은 훌륭하지만 <intent-filter>태그 하위 요소의 순서에 문제가 있다고 언급하고 싶습니다 . 내가 <intent-filter>가진 문제를 피하기 위해 해당 태그의 새로운 하위 요소로 다른 것을 만드는 것이 좋습니다 . 예를 들어 내 AndroidManifest.xml모습은 다음과 같습니다.

<activity android:name=".AntonWorld"
          android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter>
        <data android:scheme="anton" />
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.BROWSABLE" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>



답변

<intent-filter>Mainfest 파일 의 요소 를보고 싶을 것 입니다. 특히, <data>하위 요소 에 대한 문서를 살펴보십시오 .

기본적으로, 당신이해야 할 일은 자신의 계획을 정의하는 것입니다. 다음과 같은 내용이 있습니다.

<intent-filter>
    <data android:scheme="anton" />
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" /> <--Not positive if this one is needed
    ...
</intent-filter>

그런 다음 anton:URI 체계로 시작하는 링크를 사용하여 앱을 시작할 수 있어야합니다 .


답변

그런 맞춤 구성표를 사용하지 마십시오 !!! URI 스킴은 네트워크 글로벌 네임 스페이스입니다. 전 세계적으로 “anton :”체계를 소유하고 있습니까? 아니? 그런 다음 사용하지 마십시오.

한 가지 옵션은 웹 사이트를 보유하고 해당 웹 사이트의 특정 URI에 대한 의도 필터를 갖는 것입니다. 예를 들어, 다음은 Market이 웹 사이트에서 URI를 가로 채기 위해 수행하는 작업입니다.

        <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="http" android:host="market.android.com"
                android:path="/search" />
        </intent-filter>

또는 “intent :”체계가 있습니다. 이를 통해 거의 모든 의도를 URI로 설명 할 수 있으며, 클릭하면 브라우저가 실행을 시도합니다. 이러한 체계를 구축하는 가장 좋은 방법은 시작하려는 의도를 구성하는 코드를 작성한 다음 intent.toUri (Intent.URI_INTENT_SCHEME)의 결과를 인쇄하는 것입니다.

이 의도를 가진 조치를 사용하여 해당 조치를 지원하는 활동을 찾을 수 있습니다. 브라우저는 보안상의 이유로 BROWSABLE 카테고리를 실행하기 전에 인 텐트에 자동으로 추가합니다. 또한 같은 이유로 제공 한 명시 적 구성 요소를 제거합니다.

앱만 실행하도록하려면이 범위를 사용하는 가장 좋은 방법은 자체 범위 작업을 수행하고 Intent.setPackage ()를 사용하여 Intent가 앱 패키지와 만 일치한다는 것입니다.

둘 사이의 절충 :

  • http URI를 사용하려면 소유 한 도메인이 있어야합니다. 사용자에게는 항상 브라우저에 URI를 표시하는 옵션이 제공됩니다. 앱이 설치되지 않은 경우 단순히 웹 사이트에 도착하는 대체 속성이 있습니다.

  • 인 텐트 URI를 사용하려면 앱이 이미 Android 휴대 전화에만 설치되어 있어야합니다. 거의 모든 의도를 허용합니다 (그러나 항상 BROWSABLE 범주를 포함하고 명시 적 구성 요소를 지원하지 않음). 이를 통해 사용자가 브라우저 나 다른 앱으로 이동할 수있는 옵션이 없어도 앱만 실행하도록 지시 할 수 있습니다.


답변

나 자신을 홍보하는 것에 대해 사과하지만 웹 링크 https://github.com/eusonlito/jquery.applink 에서 기본 앱을 시작하는 jQuery 플러그인이 있습니다.

쉽게 사용할 수 있습니다.

<script>
$('a[data-applink]').applink();
</script>

<a href="https://facebook.com/me" data-applink="fb://profile">My Facebook Profile</a>


답변

나는 또한이 문제에 직면하여 많은 터무니없는 페이지를 봅니다. 앱을 탐색 가능하게 만들고 XML 요소의 순서를 변경하는 방법을 배웠습니다.

<activity
    android:name="com.example.MianActivityName"
    android:label="@string/title_activity_launcher">

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

    <intent-filter>
        <data android:scheme="http" />
        <!-- or you can use deep linking like  -->

        <data android:scheme="http" android:host="xyz.abc.com"/>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.BROWSABLE"/>
        <category android:name="android.intent.category.DEFAULT"/>

    </intent-filter>
</activity>

이것은 나를 위해 일했고 당신을 도울 수 있습니다.


답변

여기 내 레시피가 있습니다 :

요청한 앱 URL로 리디렉션되는 정적 HTML을 작성하고 해당 페이지를 웹에 배치하십시오.

그렇게하면 공유 링크는 Android에 관한 한 ‘실제’링크입니다 ( ‘클릭 가능’).

귀하는 일반 HTTP 링크를 ‘공유’합니다. www.your.server.com/foo/bar.html이 URL은 앱의 URI (window.location = “blah : // kuku”)로 리디렉션되는 간단한 8 줄 HTML을 반환합니다 ( ‘blah’는 더 이상 HTTP 또는 HTTPS 일 필요는 없습니다.

일단 설치하고 실행하면 위에서 제안한 모든 멋진 기능으로 HTML을 보강 할 수 있습니다.

내장 브라우저, Opera 및 Firefox에서 작동합니다 (다른 브라우저는 테스트하지 않았습니다). Firefox에서 ‘이 링크는 응용 프로그램으로 열어야합니다’라고 묻습니다 (확인, 취소). 다른 브라우저는 분명히 보안에 대해 크게 걱정하지 않으며 질문을하지 않고 앱을 열기 만합니다.


답변

앱에 대한 의도 및 사용자 정의 URL 체계가 설정되면 수신 페이지 상단 의이 자바 스크립트 코드가 iOS와 Android에서 모두 작동했습니다.

<script type="text/javascript">
// if iPod / iPhone, display install app prompt
if (navigator.userAgent.match(/(iPhone|iPod|iPad);?/i) ||
    navigator.userAgent.match(/android/i)) {
  var store_loc = "itms://itunes.com/apps/raditaz";
  var href = "/iphone/";
  var is_android = false;
  if (navigator.userAgent.match(/android/i)) {
    store_loc = "https://play.google.com/store/apps/details?id=com.raditaz";
    href = "/android/";
    is_android = true;
  }
  if (location.hash) {
    var app_loc = "raditaz://" + location.hash.substring(2);
    if (is_android) {
      var w = null;
      try {
        w = window.open(app_loc, '_blank');
      } catch (e) {
        // no exception
      }
      if (w) { window.close(); }
      else { window.location = store_loc; }
    } else {
      var loadDateTime = new Date();
      window.setTimeout(function() {
        var timeOutDateTime = new Date();
        if (timeOutDateTime - loadDateTime < 5000) {
          window.location = store_loc;
        } else { window.close(); }
      },
      25);
      window.location = app_loc;
    }
  } else {
    location.href = href;
  }
}
</script>

이것은 Android 브라우저에서만 테스트되었습니다. Firefox 또는 Opera에 대해 잘 모르겠습니다. 열쇠는 안드로이드 브라우저가 당신에게 좋은 예외를 던지지 않더라도 window.open(custom_url, '_blank')실패하고 null나중에 테스트 할 수있는 것입니다.

업데이트 : store_loc = "https://play.google.com/store/apps/details?id=com.raditaz";Android에서 Google Play에 연결하는 데 사용 합니다.


답변

앱에 대한 딥 링크를 처리 할 라이브러리를 고려할 수 있습니다.

https://github.com/airbnb/DeepLinkDispatch

위에서 제안한 사람들처럼 주석이 달린 활동에 의도 필터를 추가 할 수 있습니다. 모든 딥 링크에 대한 매개 변수의 라우팅 및 파싱을 처리합니다. 예를 들어 MainActivity에는 다음과 같은 내용이있을 수 있습니다.

@DeepLink("somePath/{useful_info_for_anton_app}")
public class MainActivity extends Activity {
   ...
}

쿼리 매개 변수도 처리 할 수 ​​있습니다.