Android
[WebView][FCM] 토큰 받은 후 웹뷰 로드
rairen
2021. 4. 6. 09:49
안녕하세요?
안드로이드 웹뷰에서 FCM 토큰을 받아 파라미터로 웹뷰 로드할 때, 같이 보내는 방법에 대해 작성하고자 합니다.
무조건 정답은 아니여서 참고만 해주시면 좋을 것 같네요.
안드로이드는 조금씩 바뀌기도 해서 예전 방식이 안되는 경우도 있다보니 제가 작성하는 방법도 언제 안될지 모르니까요 ^^
내용 시작합니다.
웹뷰 토대는 이미 했다는 것으로 생각하고 작성한 코드만 간단하게 보여드리며 넘어갈게요.
중요한 건 소스코드를 통해 이해하는 것이니까요
//활동 레이아우세서 WebView 추가
swWebView = (WebView) findViewById(R.id.swWebView);
//자바스크립트 코드를 Android 코드에 결합
swWebView.addJavascriptInterface(new WebAppInterface(this, swWebView), "AndroidJavascript");
//페이지 탐색 처리
swWebView.setWebViewClient(new swWebViewClient());
//
swWebView.setWebChromeClient(new swWebChromeClient());
//WebView에서 자바스크립트 사용
WebSettings swWebViewSettings = swWebView.getSettings();
swWebViewSettings.setJavaScriptEnabled(true);//웹 페이지 자바스크립트 허용
swWebViewSettings.setDomStorageEnabled(true);//로컬저장소 허용여부
swWebViewSettings.setJavaScriptCanOpenWindowsAutomatically(false);//자바스크립트 새창 띄우기(멀티뷰) 허용 여부
swWebViewSettings.setAllowFileAccessFromFileURLs(true);//파일 URL 로 파일 접근 허용 여부
swWebViewSettings.setAllowUniversalAccessFromFileURLs(true);//
swWebViewSettings.setSupportMultipleWindows(false);//새창 띄우기 허용 여부
swWebViewSettings.setUseWideViewPort(true);//화면 사이즈 맞추기 허용여부
swWebViewSettings.setLoadWithOverviewMode(true);//메타태그 허용 여부
swWebViewSettings.setSaveFormData(true);//
swWebViewSettings.setSupportZoom(false); // 화면 줌 허용 여부
swWebViewSettings.setBuiltInZoomControls(false); // 화면 확대 축소 허용 여부
swWebViewSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); // 브라우저 캐시 허용 여부
if (Build.VERSION.SDK_INT >= 21) {
swWebViewSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
String userAgent = swWebViewSettings.getUserAgentString();
String versionName = "";
try {
PackageInfo packageInfo = this.getPackageManager().getPackageInfo(this.getPackageName(),0);
versionName = packageInfo.versionName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if(versionName.equals("")) {
swWebViewSettings.setUserAgentString(userAgent + " Android_Web_Application");
}
else{
swWebViewSettings.setUserAgentString(userAgent + " Android_Web_Application (" + versionName + ")");
}
우선 웹뷰 관련 설정입니다.
이제 저기서 URL로 로딩만하면 끝이죠
단 FCM으로 토큰을 받는 것을 예전과 비슷하게 했더니 웹뷰를 로딩하고 토큰이 받아져서 토큰이 전달이 안되더라구요.
물론 쿠키나 스크립트로 보내는 것은 보내지겠지만 저는 URL에 get 파라미터로 보내는 겁니다.
FirebaseApp.initializeApp(this);
//FirebaseMessaging.getInstance().subscribeToTopic("news");
FirebaseMessaging.getInstance().getToken()
.addOnCompleteListener(task -> {
if (!task.isSuccessful()) {
Log.w(TAG, "Fetching FCM registration token failed", task.getException());
return;
}
// Get new FCM registration token
String token = task.getResult();
Log.d(TAG, "task result : " + token);
swWebViewLoadUrl = swWebViewLoadUrl + "&push_token=" + token;
swWebView.loadUrl(swWebViewLoadUrl);
Log.d(TAG, swWebViewLoadUrl);
});
자 이렇게 코드가 끝났습니다.
파이어베이스 앱을 초기화해주고.
토큰 얻는 것을 시작해서 얻게 되면 URL에 붙여서 파라미터로 넘어가게끔 했어요.
앱을 켜서 들어가게됬을 때, 토큰을 받을 수 있도록 말이죠.
파이어베이스 메시징 서비스 관련 코드는 인터넷에 검색하면 되니 따로 올리지는 않겠습니다.
제가 작성한 코드가 100% 정답이라고 할 순 없으니까요 ^^
참고가 되시면 좋겠습니다.
감사합니다.
반응형