웹뷰는 여러가지 이유로 사용되지만, 최근에는 웹앱을 제작하기 위해 많이 사용하게 되는 것 같다.
나도 웹앱을 만들기 위해 웹뷰를 사용할 일이 있어 관련 문서를 찾아 보았는데, 예전보다 많은 부분이 편리해진것 같다.

1. 참고문서.
   안드로이드 웹뷰 띄우기https://pizzaplanet.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%9B%B9%EB%B7%B0-%EB%9D%84%EC%9A%B0%EA%B8%B0

   clearTextTrafficPermitted 속성 (웹접속 권한 관련). : https://nobase-dev.tistory.com/81

   웹뷰 클라이언트 (WebViewClient) - 아래 문서 중 어느 것이 나 봐도 좋다.
   https://baeksupervisor.tistory.com/103   
   https://blog.naver.com/jolangma/150106605897

   웹크롬 클라이언트(.WebChromeClient )로 각종 웹뷰 콜백 받기.
   http://ankyu.entersoft.kr/Lecture/android/webview_03.asp .

   웹뷰에서, window.localStorage 사용하기.
   http://charlie0301.blogspot.com/2015/09/windowlocalstorage-android-webview.html .

 

 

2. 프로젝트를 생성.

   우리는 웹앱을 위한 웹뷰를 사용할 것 이므로, Basic Activity를 사용해, 프로젝트를 생성합니다.

 

3. ui 편집.

   웹앱을 만들 것이므로, 전체 화면에 webview가 꽉찬 형태의 ui가 필요합니다. 그래서 레이아웃의 수정이 필요한데, content_main.xml 파일을 열어 약간의 수정을 해 보도록 하자.

먼저 <TextView
          ~~~~~~~~
          ~~~~~~~~ />
부분을 지우자. 그리고 이부분을 웹뷰로 대체 하도록 하자.
   

<WebView
        android:id="@+id/activity_main_webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="0dp"
        tools:layout_editor_absoluteX="8dp"
        tools:layout_editor_absoluteY="8dp"  />

MainActivity.java 파일에서 툴바 관련 소스를 2개 정도 주석 처리 합니다. (툴바를 호출하는 구문임)

Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolBar);

 

 

4. 권한 부여.

   웹뷰로 인터넷에 접속하려면, 권한을 줘야 하는데, 이 것은 activity_main.xml 파일을 수정함으로써 가능하다.

   <application>~~</application> 바로 아래, 아래와 같이 퍼미션을 주어 인터넷 권한 부여를 하도록 하자. 예전에는 인터넷 권한만 필요했던것 같은데, 지금은 몇가지 권한이 더 요구된다, 이 글을 보시는 분들은 구 버전을 사용해 모든 권한이 필요 없을 수 있으므로, 하나씩 단계별로 권한을 적용해 보도록 하자.

   <!-- 인터넷 권한 부여 (net::ERR_CACHE_MISS) -->
   <uses-permission android:name="android.permission.INTERNET" />

   <!-- 코드상 텍스트를 입력해 접속 가능한 url 입력 가능하게 하기. (net::ERR_CLEARTEXT_NOT_PERMITTED) -->
    <manifest ...>
         ...
         <application
                    ...
                    android:usesCleartextTraffic="true"

 

   이 상황에서 에뮬레이터를 동작해 보면 크게 무리없이 동작을 한다는 것을 알 수 있다.

 

5. 웹페이지 연결.

   MainActivity.java 파일을 열어, 아래와 같이 수정합니다.

   웹뷰 컨트롤을 저장할 변수 선언 (MainActivity 클래스).

   WebView wv;

   onCreate 메소드 속 리턴 바로 위에 아래와 같이 추가하자.

   // 웹뷰 컨트롤러를 가지고 옵니다.
   wv=(WebView)findViewById(R.id.activity_main_webview);

   // 웹뷰에 데이터가 로드 될 수 있도록 합니다.
   wv.loadUrl("http://naver.com");

   *이렇게 한뒤 안드로이드를 실행해 보면, 브라우저에서 창을 띄우게 된다. 그래서 웹뷰 클라이언트를 이용해 웹부안에서 페이지가 표시되도록 웹뷰 클라이언트 객체를 사용해야 한다. 다음 단원을 참고해 웹뷰 클라이언트를 셋팅하도록 하자.

 

6. 웹뷰 클라이언트 클래스 생성.

   MainActivity.java 파일이 있는 패키지에, WebViewClient 클래스를 상속한 클래스를 만들어 추가하도록 합니다.

   

   그리고, 몇줄을 Activity에 몇 줄의 설정을 더 추가합니다. 붉은 색이 추가된 것들

   // 웹뷰 컨트롤러를 가지고 옵니다.
   wv=(WebView)findViewById(R.id.activity_main_webview);


   // 웹뷰에 자바 스크립트를 사용할 수 있게 허용.
   wv.getSettings().setJavaScriptEnabled(true);

   // 각종 알림 및 요청을 받게되는 WebViewClient를 설정합니다. (직접만든 웹뷰 클라이언트를 상속한 클래스 설정)
   wv.setWebViewClient(new CustomWebViewClient());


   // 웹뷰에 첫 주소를 연결하도록 합니다.
   wv.loadUrl("http://naver.com");

   * 여기까지 하고 웹뷰를 실행해 보면, 아래와 같이 페이지가 호출됩니다.

 

7. 툴바 제거.

   우리가 원하는 것은 전체 화면의 웹뷰 입니다. 그래야, 웹으로 전체를 다 꾸밀 수 있고, iOS에서 역시 웹소스를 그대로 사용할 수 있습니다. 그럼 툴바를 제거해 보도록 하겠습니다.

   1) activity_main.xml 파일 속, andrioid.support.design.widget.AppBarLayout 태그를 <!-- --> 를 이용해 주석 처리해 주도록 합니다.

   2) MainActivity 파일 속, 앱바 및 툴바 관련 코드를 모두 주석 처리를 해 줍니다.

       Toolbar toolbar = findViewByID(R.id.toolbar);
       setSupportActionBar(toolbar);

 

 

8. 플로팅 액션 버튼 제거.

  여기까지 작업된 화면을 보면, 전체적으로 괜찮지만, 오른쪽 하단에, 플로팅 액션 버튼이 있다. 물론 사용을 하면 편하지만, 나는 웹앱을 만들 목적 이므로, iOS와 함께 사용하려면, 웹으로 다 구현해야 한다. (그래야, iOS에서도 같은 표시가 될 것 이므로).

   activity_main.xml 파일속 <android.support.design.widget.FloatingActionButton> 태그를 지워 줍니다.

그리고, 아래의 플로팅 액션 버튼 관련 코드를 주석 처리 해 주도록 합니다.

   FloatingActionButton fab = findViewById(R.id.fab);
   fab.setOnClickListener((view)->{
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
         . setAction("Action", null).show();
   });

 

여기까지 되었다면, 웹앱을 작업하는 데 무난 할 것 이다.

 

9. 추가.

각종 콜백을 받으려면, 웹뷰 크롬을 설정해 주어야 합니다. 지금은 예시로 아래 처럼 해 두지만, WebChromeClient를 상속한 서브클래스를 만들어 두면, 웹뷰의 다운로드 프로그래스등의 이벤트를 받을 수 있습니다. (상단의 웹크롬 클라이언트(.WebChromeClient )로 각종 웹뷰 콜백 받기 문서참조). 그리고 WebChromeClient를 설정해 주지 않는다면, Alert이 뜨지 않습니다. 참고해 주세요.

wv.setWebViewClient(new CustomWebViewClient());
wv.setWebChromeClient( new WebChromeClient());

 

10 추가, 웹뷰에서 window.localStorage 사용하기.

당연한 이야기 겠지만, 파일 읽고 쓰는 퍼미션이 있어야 할 것 이다.

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>

 

그리고 아래는 안드로이드에 추가해야할 소스

WebSettings settings = webview.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDomStorageEnabled(true);
settings.setDatabaseEnabled(true);

File dir = getCacheDir();
if (!dir.exists()) {
    dir.mkdirs();
}
settings.setAppCachePath(dir.getPath());
settings.setAppCacheEnabled(true);

 

 

* 혼동하지 말 것.

   안드로이드  에뮬레이터 에서 http://localhost 로 주소를 주면, 당연히 오류가 난다. 가상이지만, 하나의 피씨로 ip를 할당 받아 사용한다. 그러므로, http://localhost 해 봐야 연결되지 않는다. 당연한 이야기 같지만, 잘 혼동하므로, 주의 하자.

   아래는 각 운영 체제별 커맨드 명령.

   MAC : ifconfig
   Windows : ipconfig

   미묘(?)한 차이가 있으므로, 잘 구분해서 IP 를 확인하도록 하자.

 

 

 

 

Posted by 창업닉군
,

맥에서 코르도바 안드로이드 플랫폼 구축하기.

코르도바는 모든 플랫폼에서 동작하는 앱을 만들어주는 개발언어 이므로, 각 개발을 원하는 플랫폼을 따로 구축해 주어야 한다.

공식문서 : https://cordova.apache.org/docs/ko/9.x/guide/platforms/android/index.html

 

1. 선행작업.
   실행을 위해서는 아래 2가지 작업이 선행되어야 한다.
   코르도바 설치 : https://nicgoon.tistory.com/186
   첫앱생성 : https://nicgoon.tistory.com/187

 

2. java 설치.
   환경 변수 문제로 인해 코르도바 트러블이 생길 수 있다. 최신 버전인 java 11 버전을 설치한다면, 코르도바는 java가 설치되지 않은 것으로 인식한다. 당연히 문제가 발생한다. 그러므로, 8 버전을 설치한다. (한국 번역본은 보지 않도록 한다.)

설치공식사이트 : https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

 

3. 안드로이드 스튜디오를 설치하면 Gradel이 자동으로 설치된다 하지만, 이 버전이 매우 낮다. 코르도바는 5.x때의 gradle을 사용하므로, 직접 설치를 해 주어야 한다.

설치메뉴얼 : https://gradle.org/install/

여기서 우리는 installing manually 항목대로 설치를 할 것 이다.
다운로드 페이지에서  binary-only나 complete를 다운로드 받으면된다. 맥 같은 경우 다운로드를 받으면, 바로 압축이 풀어 지므로, 그대로 지정한 폴더로 복사하면된겠다.

복사할 위치 : /opt/gradle

설치메뉴얼 처럼 한 번에 폴더가 생성되지 않는다, 대체로 아래처럼 입력하면 무난하다. (그냥 파인더로 생성해도 상관없습니다.)

$ sudo mkdir /opt
$ sudo mkdir /opt/gradle

그냥 파인터를 이용해 데이터를 복제하자.

환경변수는 아래와 같이 등록합니다.

$ export PATH=$PATH:/opt/gradle/gradle-5.3.1/bin

위의 방법이 메뉴얼에 나와 있는 방법인데, 터미널을 다시켜면 환경변수가 지워졌습니다.
이것을 해결하기 위해, 유저 홈디렉토리 (cd ~로 이동할 수있는), 폴더를 파인더로 찾아가 Shift + command + . 을 동시에 눌러 감춰진 파일들이 표시되도록 하였습니다.
여기서 .bash_profile 파일을 편집기(저는 vs code를 이용했습니다.)를 열어 위의 패스를 걸어 줍니다.

 

4. 안드로이드 스튜디오, 설치.
   안드로이드 설치하는 아래 사이트에 가면 자동으로 시작이된다.
   https://developer.android.com/studio/install?hl=ko

   안드로이드 스듀이로를 열어 tools > SDK Manager를 열어 다음 사항을 확인해 줍니다.
   1) Android Platform SDK 안드로이드 버전을 확인합니다.
   2) Android SDK build-tools 19 이상 혹은 최상위 버전.
   3) 안드로이드 SDK가 설치된 경로, (이것을 알아야 패스를 거어 줄수 있습니다.) 

   환경변수 설정해 주기.
   이것을 해 줘야 코르도바에서 안드로이드 관련 소스들을 찾을 수 있다. gradle 환경 변수를 설정했던 요령으로, 안드로이드를 위한 환경변수를 같은 파일에 추가해 줍니다.

   export ANDROID_HOME=안드로이드 sdk
   export PATH=$PATH:안드로이드 sdk/platform-tools:안드로이드 sdk/tools

 

 

5. 플랫폼 추가.

프로젝트를 생성해, 해당 폴더로 이동합니다.

$ sudo cordova create hello com.exaple.hello helloworld
$ cd hello

플랫폼을 추가해 줍니다.

$ sudo cordova platform add android

 추가된 플랫폼을 확인해 줍니다.

$ cordova platform ls

 

6. 빌드

모든 플랫폼 빌드.
$ sudo cordova build

안드로이드만 빌드.
$ sudo cordova build android

 

7. 테스트

$ sudo cordova emulate android

빌드 자체는 정말 잘된다 문제는 설정이 까다롭다는 것인데, 다행이 오류 코드를 자 뱉어 주므로, 이를 해결해 나가면 크게 문제가 없다.

 

8. 테스트가 되지 않을 때,

$ adb kill-server
$ adb start-server

위 두 명령을 차례로 쓴다면, adb가 차례로 재 시작된다. 그리고, 아래 명령을 통해 확인해 보면, 장치가 인증되지 않았다고 나올 것이다.
개발자 모드를 활성화 한 뒤, usb를 뺏다 꽂으면 문제가 해결이 된다.

$ adb devices

Posted by 창업닉군
,

선행 작업.
파이어 베이스 프로젝트 생성 : http://nicgoon.tistory.com/171
안드로이드 프로젝트 생성 및 안드로이드 프로젝트에 파이어 베이스 추가 : http://nicgoon.tistory.com/172

 문서를 참고 하시기 바랍니다.

 

 

위 선행작업이 완료되었다면, 파이어 베이스로(https://console.firebase.google.com) 접속 합니다. 아래와 같은 창이 뜨면 자신이 설정할 프로젝트를 선택해 줍니다.

그럼 프로젝트 창이 뜨는 데, 왼쪽 아래의 Notification 항목을 선택해 줍니다.

그럼 아래와 같은 창을 만납니다. 일단 이 곳에서는 자신의 앱이 설치된 스마트폰에 메시지를 보낼 수 있습니다. 테스트 과정에 사용해 보기 좋으며, 이를 참고해서 추후 웹서버를 구성하면 좋습니다. 일단 클라이언트 부분을 완성해야 하므로, 아래에 표시된 문서 보기를 눌러 줍니다.

아래 화면이 나오면 조금 더 내려서, [ANDROID 설정] 버튼을 눌러줍니다.
바로 가기 주소 : https://firebase.google.com/docs/cloud-messaging/android/client

 

-> [firebase message service] 플러그인 추가.
앱 수준의 [Build.gradle] 에 플러그인을 추가하면, 되며, 차 후 다른 서비스의 플러그인을 추가할 때도, 이 곳에 플러그인을 추가하면 됩니다.

 

 

-> 메시지를 수신하고 처리하는 서비스와, 토큰을 관리하는 서비스를 추가한다.
    액티비티 아래 부분에 추가하는 것이 가장 적당하다.

 

-> 옵션 사항으로, 메시지가 왔을 때 메시지 리스트에 쌓을 스택 바에 표시될 아이콘에 관한 설정을 할 수 있다.
<Application> 태그 사이에 추가하고, 아이콘을 설정한 메타 태그 속 [android:resource=@] 값은 이미지 값을 설정해 둔다.

-> 토큰을 관리하는 [FirebaseInstanceIdService] 파일을 생성하고, 필요한 코드를 추가합니다.
이는 설명을 잘 읽어 보고, 아래 내용의 파일을 액티비티가 있는 폴더에 그대로 생성합니다.

https://github.com/firebase/quickstart-android/blob/master/messaging/app/src/main/java/com/google/firebase/quickstart/fcm/MyFirebaseInstanceIDService.java#L35-L45

 

-> [MyFirebaseMessagingService.java] 파일 추가.
해당 문서에는 나와 있지 않지만, 위의 매니페스트에서 서비스가 실행됨을 정의했으므로, 당연히 파일을 추가해야 한다.
아래의 파일을 액티비티가 있는 폴더에 생성해 추가한다.

https://github.com/firebase/quickstart-android/blob/master/messaging/app/src/main/java/com/google/firebase/quickstart/fcm/MyFirebaseMessagingService.java

 

이 파일을 추가 후 아래 표시될 아이콘을 변경해 주어야 한다.

 

아래 이미지 처럼 /App 폴더 속 [Build.gradle] 파일에 [compile 'com.firebase:firebase-jobdispatcher:0.6.0']을
추가해 줍니다.

 

마지막으로, 메인 액티비티가 있는 폴더에, 아래 파일을 추가해 주고, 실행하면됩니다.

https://github.com/firebase/quickstart-android/blob/master/messaging/app/src/main/java/com/google/firebase/quickstart/fcm/MyJobService.java

 

-> 파이어 베이스 콘솔을 통해 메시지를 보냅니다.

여기까지하고 앱을 실행시키고, 메시지를 보내면, 메시지가 오는 것을 확인할 수 없습니다.
다만 Android Monitor에 찍힌 값을 보면 메시지가 왔을 때 본문을 확인할 수 있습니다.
( Android Monitor에서 [onMessageReceived]값을 검색어로 입력 하면 확인 가능.  )

 

-> 메시지 푸쉬 부분을 구현하기 위해, [MyFirebaseMessagingService.java] 파일의 [onMessageReceived]
파일의 코드를 수정합니다.

그리고 메시지를 보내면, 메시지가 오는 것을 확인할 수 있습니다.

'Android > FCM 연동' 카테고리의 다른 글

안드로이드 FCM push Message (2/3)  (0) 2017.08.27
안드로이드 FCM push Message (1/3)  (0) 2017.08.27
Posted by 창업닉군
,

선행되어야할 작업.

-> 파이어 베이스 프로젝트 생성 : http://nicgoon.tistory.com/171

 

이 포스트에서는 안드로이드 앱에 FCM을 추가하는 하는 작업을 합니다.
공식 문서( https://firebase.google.com/docs/android/setup )를 열어 함께 보며 작업 하시기 바랍니다.

 

먼저 [google-service.json] 파일을 다운 받습니다. 방법은 파이어 베이스에 로그인하고, 원하는 프로젝트를 선택합니다.
그리고, 아래 그림처럼 [프로젝트 설정]을 선택합니다.

아래와 같은 페이지가 나오면, [google-services.json] 파일을 다운 받은 후 잘 저장해 둡니다.

일단, 안드로이드 프로젝트를 생성하되 아무것도 없는 빈 문서를 생성합니다. (굳이 복잡할 필요가 없으므로....)

다운로드 받은 파일을 생성한 안드로이드 프로젝트에 [App/] 폴더 아래에 추가해 줍니다.

 

그리고, 코드들을 약간수 정해 주어야 하는데, 메인 액티비티 프로젝트 속에 있는 [Build.gradle] 파일을 열어,
classpath 'com.google.gms:google-services:3.1.0' 문자열을 추가합니다.

 

 

 [App] 폴더 속 [Build.gradle] 파일에는 아래와 같이 2줄을 추가한다.

 

 

 

마지막으로 안드로이드 스튜디오 오른쪽 상단의 [Sync Now] 를 클릭하면 모든 작업이 완료 됩니다. (아래 그림 참조).

'Android > FCM 연동' 카테고리의 다른 글

안드로이드 FCM push Message (3/3)  (0) 2017.08.28
안드로이드 FCM push Message (1/3)  (0) 2017.08.27
Posted by 창업닉군
,

안드로이드에 push message를 보내려면, 구글에 로그인하고, firebase(https://console.firebase.google.com/)에 접속합니다. 그럼 아래와 같은 창을 만나게 됩니다.

 

일단 자신의 앱에 사용할 서비스를 설정할 프로젝트를 만들어 준다. 당연히 앱 이름과 비슷하거나, 같다면, 관리하기 편하다. 화면 하단의 [프로젝트 추가](큰 파란 버튼) 버튼을 누릅니다.

그럼 아래와 같이 프로젝트 만들기 창이 뜹니다. [프로젝트 이름] 항목과 [국가/지역] 항목을 선택한 후 [프로젝트 만들기] 버튼을 눌러 줍니다.

프로젝트가 생성되어 프로젝트 창이 뜨면 아래와 같은 창이 뜹니다.

우리가 할 작업은 안드로이드에 Push를 추가하는 것 이므로, [Android 앱에 Firebase 추가] 이미지를 선택해 줍니다.

아래 이미지 참조

프로젝트 생성 창이 뜨면, Android 패키지 이름을 적으면 오른쪽 아래의 앱 등록 버튼이 활성화되는 데, 이 버튼을 눌러 다음 페이지로 넘어 갑니다. (나머지는 선택사항으로 테스트용으로만 사용할 경우 필요 없습니다.

 

아래 페이지는 구글 서비스 설정파일을 등록하는 것 인데, 아직 안드로이드 프로젝트를 만들지 않았다면, 필요할 때 언제든지 확인이 가능하므로, 오른쪽 아래의 [계속] 버튼을 눌러 다음으로 넘어 갑니다.

마지막으로 파이어 베이스 플러그인을 사용하기 위해, Gradle을 추가하는 설정을 방법을 알려 주는 페이지 입니다.
이 후에 확인이 가능 하므로, [완료] 버튼을 눌러 다음으로 넘어 가도록 합니다.

 

 

 

'Android > FCM 연동' 카테고리의 다른 글

안드로이드 FCM push Message (3/3)  (0) 2017.08.28
안드로이드 FCM push Message (2/3)  (0) 2017.08.27
Posted by 창업닉군
,