안드로이드 앱에서 웹 호출 - andeuloideu aeb-eseo web hochul

package com.HelloWeb;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.webkit.WebView;

import android.webkit.WebViewClient;

public class HelloWeb extends Activity {
WebView webview;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

webview = (WebView) findViewById(R.id.webview);

try {

webview.loadUrl("http://m.daum.net/");

} catch (Exception ex) {

ex.printStackTrace();

}

webview.getSettings().setJavaScriptEnabled(true);

webview.setWebViewClient(new DraptWebViewClient());

}

}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
  if ((keyCode == KeyEvent.KEYCODE_BACK) && wv.canGoBack()) {
    wv.goBack();
    return true;
  }
  return super.onKeyDown(keyCode, event);
}

private class DraptWebViewClient extends WebViewClient {
  @Override
  public boolean shouldOverrideUrlLoading(WebView view, String url) {
    view.loadUrl(url);
    return true;
  }
}

(1) HTTP URL 지정 방법

    browser = (WebView) findViewById(R.id.webkit);
    browser.loadUrl("http://m.naver.com");
    browser.getSettings().setJavaScriptEnabled(true);    // 자바스크립트 사용 시 설정

    위의 경우에 인터넷 권한을 매니페스트 파일에 등록하고도 에뮬레이터에서 연결이 안되는 경우에는 단말의 네트워크 설정을 확인해 보시기 바랍니다.

    Settings > Wireless&Networks > Airplane Mode  가 선택되어 있거나 할 경우 에뮬레이터에서 3G 연결 등이 안될 수 있습니다.

        이 설정이 문제가 없고 에뮬레이터 상단에 3G 아이콘이 보이고 PC 자체가 인터넷에 연결 가능하면 위의 코드로 페이지가 보일 것으로 예상됩니다.

(2) 문자열 데이터 지정 방법

    browser = (WebView)findViewById(R.id.webkit);
    browser.loadData("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /><html><body>Hello, 마이크!</body></html>", "text/html", "utf-8");

    위의 경우에 <meta> 태그를 이용해 charset을 utf-8 로 지정하면 한글을 볼 수 있습니다.

(3) 파일 지정 방법

    hello.html 파일에 아래의 내용이 들어가 있을 경우,

    <meta http-equiv='Content-Type' content='text/html; charset=euc-kr' />
    <html>
        <body>
            Hello, 마이크!
        </body>
    </html>

    - 프로젝트의 /assets 폴더에 위의 파일을 추가합니다.

    - 아래 코드를 이용하여 로딩합니다.

    - 파일에서는 <meta> 태그의 charset을 euc-kr 로 지정하면 한글을 볼 수 있습니다.

    browser = (WebView) findViewById(R.id.webkit);
    browser.loadUrl("file:///android_asset/hello.html");

참고 : http://android-town.org/

※ 애뮬레이터에서 정상적으로 WebView가 실행되지 않는다면, Manifest.xml 에서 인터넷 permission을 허용해준다.

    <!-- Internet Permission Configuration -->
    <uses-permission android:name="android.permission.INTERNET" />
</manifest> 

모바일웹에서 앱 호출하기

( 스키마를 이용한 앱 호출하기, 모바일웹에서 마켓 이동하기 )

앱을 만들때 커스텀 스키마를 등록을 해주고,

모바일웹에서 그 커스텀 스키마를 호출하는 방식이다.

안드로이드 매니페스트 파일 

host를 main_web 으로 설정, scheme를 myappandroi 로 설정

<activity​ android:name=".MainActivity"​ android:screenOrientation="portrait">
	 <intent-filter>
		 <action android:name="android.intent.action.MAIN" />
		 <category android:name="android.intent.category.LAUNCHER" />
	 </intent-filter>
	 <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="main_web"​ android:scheme="myappandroi" />
	 </intent-filter>
</activity>​

아이폰 TARGETS - URL Types 에 추가

Identifier를 com.myappandroid.m 으로 설정, scheme를 myappandroi 로 설정

   Identifier : com.myappandroi.m
   URL Schemes : myappandroi
   Role : Editor

Javascript 파일에서..

안드로이드폰은 해당 앱이 있으면 앱을 실행하고, 없으면 플레이스토어로 이동이 잘되지만,

아이폰은 현재 코딩대로 하면 해당 앱이 있으면 앱을 실행하고, 해당 앱이 없으면 "오류 팝업 메시지" 가 나오고 잠시후에 앱스토어로 이동하는 방식이다.  해당 앱이 없을경우 처리가 원만하지 않아서... 그냥 무조건 앱스토어로 가도록 처리하는것도 좋을것 같다.

	var userAgent = navigator.userAgent;
	var visiteTm = ( new Date() ).getTime();
	if(userAgent.match(".*Android.*")){
		//안드로이드폰
		// https://developer.chrome.com/multidevice/android/intents
        // 앱이 있으면 앱 실행, 없으면 마켓 이동
		location.href = 'intent://main_web#Intent;scheme=myappandroi;package=com.myappandroi.m;end';	
		//location.href = 'myappandroi://main_web';  // 안드로이드 앱 실행
	}else if(userAgent.match(".*iPhone.*") || userAgent.match(".*iPad.*")){
		//아이폰
		setTimeout( function () {
			if ( ( new Date() ).getTime() - visiteTm < 3000 ) {  // 앱스토어 이동
				location.href = "https://itunes.apple.com/app/id365494029";
			}
		} ,2500 );
		setTimeout( function () {  // 앱실행
			location.href = "myappandroi://";
		} ,0 );
	}

참고 :  https://marobiana.tistory.com/111

모바일 웹 브라우저에서 앱 설치여부에 따라 앱 또는 마켓으로 이동시키기

모바일 웹 브라우저에서, 앱 설치 여부에 따라 마켓 또는 앱으로 이동 시키기. 일종의 브릿지 페이지.. 먼저 아이폰의 경우.. 간단하다! var userAgent = navigator.userAgent; var visitedAt = (new Date()).getT..

marobiana.tistory.com

https://g-y-e-o-m.tistory.com/121

[iOS & Android] 웹 브라우저에서 앱 실행하기

[기본은 스키마] iOS : http://g-y-e-o-m.tistory.com/33 Android : http://g-y-e-o-m.tistory.com/32 안드로이드의 경우 매니페스트 내에 선언한 스키마(Scheme), 호스트(host)란 안드로이드 속성으로 선언하여,..

g-y-e-o-m.tistory.com

요즘은 Firebase 동적 링크를 많이 사용하곤 한다.

이 방식을 사용하여, 해당 앱이 없으면 설치를 해당앱이 있으면 앱 실행을 할 수 있다.

아래 링크를 확인해 보자

https://firebase.google.com/docs/dynamic-links?authuser=0&%3Bhl=ko&hl=ko 

Firebase 동적 링크  |  Firebase Documentation

Firebase 동적 링크는 앱 설치 여부에 관계없이 여러 플랫폼에서 원하는 대로 작동하는 링크입니다.

firebase.google.com