안드로이드 브라우저에서 내 앱을 시작하는 링크를 만드시겠습니까?
다음과 같은 링크를 만들 수 있습니까?
<a href="anton://useful_info_for_anton_app">click me!</a>
내 안톤 앱을 시작하게 만들었나요?
이것이 시장 프로토콜이 있는 안드로이드 마켓 앱에서 작동한다는 것을 알고 있지만, 다른 앱에서도 비슷한 일을 할 수 있습니까?
다음은 Android 마켓을 시작하는 링크의 예입니다.
<a href="market://search?q=pname:com.nytimes.android">click me!</a>
업데이트: 그의 시니어가 제공한 답변은 훌륭하지만, 저는 단지 제가 하위 요소의 순서에 약간의 문제가 있었다는 것을 언급하고 싶습니다.<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>
당신만의 맞춤법을 그렇게 사용하지 마세요!!!URI 체계는 네트워크 글로벌 네임스페이스입니다.당신은 전 세계적으로 "안톤:" 계획을 가지고 있습니까?안 돼요? 그럼 사용하지 마세요.
한 가지 옵션은 웹 사이트를 가지고 해당 웹 사이트에 특정 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>
또는 "entent:" 방식이 있습니다.이렇게 하면 거의 모든 Intent를 URI로 설명할 수 있으며, 클릭하면 브라우저가 실행을 시도합니다.이러한 체계를 구축하기 위해 가장 좋은 방법은 실행할 인텐트를 구성하는 코드를 작성한 다음 인텐트의 결과를 Uri(인텐트)에 인쇄하는 것입니다.URI_INTENT_SCHEM).
이 목적을 가진 작업을 사용하여 해당 작업을 지원하는 모든 활동을 찾을 수 있습니다.브라우저는 보안상의 이유로 브라우저 범주를 시작하기 전에 자동으로 의도에 추가합니다. 또한 동일한 이유로 사용자가 제공한 명시적 구성 요소를 제거합니다.
앱만 실행하려면 사용자의 범위가 지정된 작업을 수행하고 의도를 사용하는 것이 가장 좋습니다.setPackage()는 의도가 앱 패키지와 일치하는 것으로만 표시됩니다.
둘 사이의 균형:
http URI를 사용하려면 사용자가 소유한 도메인이 있어야 합니다.사용자는 항상 브라우저에 URI를 표시하는 옵션을 받습니다.앱이 설치되어 있지 않으면 웹 사이트에 쉽게 도착할 수 있는 매우 멋진 폴백 속성을 가지고 있습니다.
의도된 URI를 사용하려면 앱이 이미 설치되어 있고 Android 전화기에만 설치되어 있어야 합니다.는 거의 모든 의도를 허용하지만, 명시적 구성 요소를 지원하지 않고 항상 BROWSABLE 범주를 포함합니다.사용자가 브라우저나 다른 앱으로 이동할 수 있는 옵션 없이 앱만 실행할 수 있습니다.
매니페스트 파일의 요소를 보고 싶을 것입니다.특히 하위 요소에 대한 설명서를 살펴봅니다.
기본적으로, 여러분이 해야 할 일은 여러분 자신의 계획을 정의하는 것입니다.다음과 같은 것:
<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 방식입니다.
웹 링크에서 네이티브 앱을 실행할 수 있는 jQuery 플러그인이 있습니다. https://github.com/eusonlito/jquery.applink
쉽게 사용할 수 있습니다.
<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(http.location = "blah://kuku")로 리디렉션하는 간단한 8줄 HTML을 반환합니다('blah'는 더 이상 HTTP 또는 HTTPS일 필요가 없습니다).
일단 당신이 이것을 시작하고 실행하면, 당신은 위에서 제안한 것처럼 모든 고급 기능으로 HTML을 강화할 수 있습니다.
이 기능은 내장 브라우저인 Opera 및 Firefox(다른 브라우저는 테스트하지 않음)와 함께 작동합니다.Firefox는 '이 링크를 응용 프로그램과 함께 열어야 합니다'라는 메시지를 표시합니다(확인, 취소).다른 브라우저들은 분명히 보안에 대해 그렇게 걱정하지 않고, 그들은 단지 앱을 열 뿐입니다.
이 방법은 앱이나 브라우저를 열 것을 요청하는 명확한 대화 상자를 호출하지 않습니다.
<manifest package="com.myApp" .. >
<application ...>
<activity ...>
<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:host="gallery"
android:scheme="myApp" />
</intent-filter>
</activity>
..
그리고 예를 들어 당신의 전화기에 있는 이메일에서 이 URL을 클릭합니다.
<a href="intent://gallery?directLink=true#Intent;scheme=myApp;package=com.myApp;end">
Click me
</a>
그러면 안드로이드는 당신의 갤러리 의도에 반응하고 myApp 스킴을 가진 패키지 com.myApp으로 앱을 찾으려 할 것입니다.만약 그럴 수 없다면, 그것은 당신을 가게로 데리고 가서 당신의 앱이어야 할 com.myApp을 찾을 것입니다.
일단 당신이 당신의 앱에 대한 의도와 사용자 정의 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 브라우저에서만 테스트되었습니다.파이어폭스나 오페라에 대해서는 잘 모르겠습니다.안드로이드 브라우저가 당신을 위해 좋은 예외를 던지지 않을지라도 중요한 것은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
위에서 제안한 사람들처럼 주석이 달린 활동에 의도 필터를 추가할 수 있습니다.모든 딥 링크에 대한 매개 변수의 라우팅 및 구문 분석을 처리합니다.예를 들어 기본 활동에는 다음과 같은 것이 있을 수 있습니다.
@DeepLink("somePath/{useful_info_for_anton_app}")
public class MainActivity extends Activity {
...
}
쿼리 매개 변수도 처리할 수 있습니다.
제 간단한 방법을 시도해 보세요.
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(url.startsWith("classRegister:")) {
Intent MnRegister = new Intent(getApplicationContext(), register.class); startActivity(MnRegister);
}
view.loadUrl(url);
return true;
}
그리고 나의 html 링크:
<a href="classRegister:true">Go to register.java</a>
또는 클래스 파일 이름에 대해 <a href="classRegister:true" > <- "true" 값을 만들 수 있습니다.
하지만 이 스크립트는 메일이 링크되도록 작동합니다 :)
if (url.startsWith("mailto:")) {
String[] blah_email = url.split(":");
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("text/plain");
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{blah_email[1]});
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, what_ever_you_want_the_subject_to_be)");
Log.v("NOTICE", "Sending Email to: " + blah_email[1] + " with subject: " + what_ever_you_want_the_subject_to_be);
startActivity(emailIntent);
}
브라우저를 통해 앱을 열고 싶으십니까?다음 코드를 사용하여 이를 달성할 수 있습니다.
HTML:
<a href="intent:#Intent;action=packageName;category=android.intent.category.DEFAULT;category=android.intent.category.BROWSABLE;end">Click here</a>
매니페스트:
<intent-filter>
<action android:name="packageName" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
이 인텐트 필터는 시작 프로그램 활동에 있어야 합니다.
브라우저 링크 클릭 시 데이터를 전달하려면 이 링크를 참조하십시오.
언급URL : https://stackoverflow.com/questions/3469908/make-a-link-in-the-android-browser-start-up-my-app
'programing' 카테고리의 다른 글
고유 키가 정의된 mariadb 테이블의 이상한 동작(즉, 고유하지 않음) (0) | 2023.08.30 |
---|---|
열려 있는 파일 구조에서 파일 핸들을 가져오려면 어떻게 해야 합니까? (0) | 2023.08.30 |
전체 Android 앱에 대한 기본 글꼴 제품군을 설정하는 방법 (0) | 2023.08.26 |
자바.java.javanoClassDefFoundError: javax/xml/soap/SOAP 예외 (0) | 2023.08.26 |
실행 중인 노드.제이슨 안드로이드 (0) | 2023.08.26 |