웹뷰를 사용하여 Google 로그인 및 페이스 북 로그인이있는 웹 사이트를 렌더링하는 Android 앱이 있습니다. 문제는 Google 또는 페이스 북 로그인을 할 때 모바일 브라우저를 열고 로그인에 성공하면 앱으로 돌아 가지 않고 브라우저에 남아 있다는 것입니다. 앱으로 이동하고 싶습니다. 로그인 페이지가 웹뷰 자체에서 열리 든 브라우저에서 열리 든 상관 없습니다. 그러나 로그인에 성공하면 앱의 홈 웹 사이트로 다시 리디렉션되어야합니다. 웹 페이지 자체에서 로그인 페이지를 렌더링하려고 시도했지만 로그인 후 페이지에 멈 춥니 다.
매니페스트에 인터넷 권한을 추가했습니다
public class MainActivity extends AppCompatActivity {
WebView myWebView;
WebView myPopedWebView;
WebSettings myWebSettings;
FrameLayout mContainer;
String HOME_URL = "https://www.something.com";
String HOME_URL_PREFIX = "www.something.com";
Context mContext;
@SuppressLint("SetJavaScriptEnabled")
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CookieManager cm = CookieManager.getInstance();
cm.setAcceptCookie(true);
myWebView = findViewById(R.id.myWebView);
myWebSettings = myWebView.getSettings();
mContainer = findViewById(R.id.frame_layout);
myWebView.loadUrl(HOME_URL);
myWebView.setWebViewClient(new customWebViewClient());
myWebView.setWebChromeClient(new customWebChromeClient());
myWebSettings.setJavaScriptEnabled(true);
myWebSettings.setDomStorageEnabled(true);
myWebSettings.setJavaScriptCanOpenWindowsAutomatically(true);
myWebSettings.setAppCacheEnabled(true);
myWebSettings.setSupportMultipleWindows(false);
myWebSettings.setUserAgentString(myWebSettings.getUserAgentString().replace("; wv", ""));
mContext = this.getApplicationContext();
}
public class customWebViewClient extends WebViewClient {
@Override public boolean shouldOverrideUrlLoading(WebView view, String url) {
String host = Uri.parse(url).getHost();
Log.d("Loading url", url);
if (host.equals(HOME_URL_PREFIX)) {
if (myPopedWebView != null) {
myPopedWebView.setVisibility(View.GONE);
mContainer.removeView(myPopedWebView);
myPopedWebView = null;
}
return false;
}
if (host.equals("www.facebook.com") || host.equals("www.accounts.google.com")) {
return false;
}
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return false;
}
@Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
Log.d("onReceivedSslError", "onReceivedSslError");
}
}
public class customWebChromeClient extends WebChromeClient {
@SuppressLint("SetJavaScriptEnabled")
@Override public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
myPopedWebView = new WebView(mContext);
myPopedWebView.getSettings().setDomStorageEnabled(true);
myPopedWebView.getSettings().setJavaScriptEnabled(true);
myPopedWebView.setWebChromeClient(new customWebChromeClient());
myPopedWebView.setWebViewClient(new customWebViewClient());
myPopedWebView.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
WebView.WebViewTransport transport = (WebView.WebViewTransport)resultMsg.obj;
transport.setWebView(myPopedWebView);
resultMsg.sendToTarget();
return true;
}
@Override public void onCloseWindow(WebView window) {
Log.d("onCloseWindow", "closed");
}
}
}
-
답변 # 1
관련 자료
- ios - SwiftUI에서 Google 로그인을 사용할 때 OIDAuthorizationService의 NSInvalidArgumentException
- java - Android WebView에서 북마크 추가를 활성화하는 방법
- Google이 Android 앱용 Kotlin에 새로운 개발자를 푸시하는 이유는 무엇인가요?
- firebase - Android에서 Google Analytics의 매니페스트를 어떻게 업데이트합니까?
- xamarin.forms - Xamarin 양식 Android WebView 비디오 전체 화면
- Google Play Console에서 Android 사용자 버전을 찾는 방법은 무엇입니까?
- Dart 및 Kotlin 플러그인을 비활성화 한 후 Android 스튜디오가 실행되지 않음
- 구글지도 안드로이드에서 점프 라인을 제거하는 방법
- Google Play가있는 Android 에뮬레이터가 Android Studio 41에서 종료되었습니다
- Android 로그인 힌트가 제대로 표시되지 않음
- java - Android 스튜디오, 앱을 다시 연 후 Fileproperties가 삭제됨
- flutter - Android에서 앱을 제거/재설치 한 후 SQFlite 데이터를 유지하는 가장 좋은 방법은 무엇입니까?
- java - WebView Android에 JavaScript를 포함하는 방법
- 빌드 후 Cordova Android 앱 강제 종료
- Android Google Map SDK Toolbar issue - Android Google Map SDK 툴바 문제 — 외부지도가 실행되지 않음
- flutter - Android 앱의 경우 v 109 이후에 나오는 버전 코드
- azure devops - xamarinforms를 업데이트 한 후 Android에 대한 빌드 실패
- html - google 글꼴 - 페이지 후에 글꼴 패밀리가로드됩니다 어떻게 수정합니까?
- firebase - Android Studio에서 작동하지 않는 Google 로그인 인증
- xfce - Google 크롬 및 Chromium은 수행 할 작업을 몇 초 후에 닫습니다
로그인 콜백으로 페이스 북 (또는 구글) 계정 로그인을 요청하는 코드가 없습니다. 수행 할 수있는 작업은 다음과 같습니다.
페이스 북 또는 Google 버튼으로 로그인 한 웹 사이트에서 로그인 기능 (로그인 콜백 URL 구성과 함께)을 코딩하십시오.
또는 Android 앱에서 페이스 북 및 Google 로그인 (auth) SDK를 추가하고 앱에서 로그인 및 콜백을 처리 할 수 있습니다 (java/kotlin 코드 작성).
두 방법 중 하나를 선택할 수 있으며 웹 (접근 1) 또는 안드로이드 (접근 2)에 페이스 북 SDK를 통합하는 방법에 대한 온라인 자습서를 쉽게 찾을 수 있습니다.
해피 코딩 !!