Notice
Recent Posts
Recent Comments
Link
투케이2K
89. (ios/swift) 웹뷰 decidePolicyFor 실시간 주소 감지 부분 확인 및 외부 앱 실행 실시 본문
[개발 환경 설정]
개발 툴 : XCODE
개발 언어 : SWIFT
[소스 코드]
// MARK: - [웹뷰 실시간 url 변경 감지 실시]
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
let _shouldUrl = String(describing: webView.url?.description ?? "")
var action: WKNavigationActionPolicy?
guard let url = navigationAction.request.url else { return }
print("")
print("===============================")
print("[A_Nice >> decidePolicyFor() :: 웹뷰 실시간 url 변경 감지]")
print("_shouldUrl :: \(_shouldUrl)")
print("requestUrl :: \(url)")
print("===============================")
print("")
// [앱설치 링크로 진입시 별도 처리(https://itunes.apple.com/kr/app/id ...)]
if ("\(url)".description.hasPrefix("https://itunes.apple.com") || "\(url)".description.hasPrefix("http://itunes.apple.com")) {
// -----------------------------------------
// [메인 큐에서 비동기 방식 실행 : UI 동작 실시]
DispatchQueue.main.async {
// [스토어 연결(OS에서 처리)]
guard let appsUrl = URL(string: "\(url)")
else {
print("")
print("====================================")
print("[A_Nice >> decidePolicyFor() :: 웹뷰 실시간 url 변경 감지]")
print("로 직 :: 마켓 이동 에러]")
print("error :: ", "URL 파싱 에러")
print("====================================")
print("")
return
}
// -----------------------------------------
UIApplication.shared.open(appsUrl, completionHandler: { (success) in
if (success) {
print("")
print("====================================")
print("[A_Nice >> decidePolicyFor() :: 웹뷰 실시간 url 변경 감지]")
print("로 직 :: 마켓 이동 수행]")
print("appsUrl :: \(url)")
print("====================================")
print("")
}
else {
print("")
print("====================================")
print("[A_Nice >> decidePolicyFor() :: 웹뷰 실시간 url 변경 감지]")
print("로 직 :: 마켓 이동 실패]")
print("appsUrl :: \(url)")
print("====================================")
print("")
}
})
// -----------------------------------------
// [웹뷰 내 페이지 이동 안하도록 설정(PolicyCancel)]
decisionHandler(action ?? .cancel)
return
// -----------------------------------------
}
}
else if ("\(url)".description.hasPrefix("testApp://")) {
// -----------------------------------------
// 외부 앱 Scheme로 URL이 시작되는 경우
// 테스트 앱 링크 처리 예시 (testApp://)
// 추가로 연동하고 싶은 앱스키마가 있다면 or 조건에 추가 해주세요.
// -----------------------------------------
// [메인 큐에서 비동기 방식 실행 : UI 동작 실시]
DispatchQueue.main.async {
// [스토어 연결(OS에서 처리)]
guard let appsUrl = URL(string: "\(url)")
else {
print("")
print("====================================")
print("[A_Nice >> decidePolicyFor() :: 웹뷰 실시간 url 변경 감지]")
print("로 직 :: NICE 아이핀 앱 링크 처리 에러]")
print("error :: ", "URL 파싱 에러")
print("====================================")
print("")
return
}
// -----------------------------------------
UIApplication.shared.open(appsUrl, completionHandler: { (success) in
if (success) {
print("")
print("====================================")
print("[A_Nice >> decidePolicyFor() :: 웹뷰 실시간 url 변경 감지]")
print("로 직 :: NICE 아이핀 앱 링크 처리 수행]")
print("appsUrl :: \(url)")
print("====================================")
print("")
}
else {
print("")
print("====================================")
print("[A_Nice >> decidePolicyFor() :: 웹뷰 실시간 url 변경 감지]")
print("로 직 :: NICE 아이핀 앱 링크 처리 실패]")
print("appsUrl :: \(url)")
print("====================================")
print("")
}
})
// -----------------------------------------
// [웹뷰 내 페이지 이동 안하도록 설정(PolicyCancel)]
decisionHandler(action ?? .cancel)
return
// -----------------------------------------
}
}
// -----------------------------------------
// [일반 웹 페이지 링크 처리(PolicyAllow)]
decisionHandler(action ?? .allow)
return
// -----------------------------------------
}
반응형
'IOS' 카테고리의 다른 글
91. (ios/swift) ipa 파일 xcode 사용해 설치 진행 방법 (0) | 2022.01.03 |
---|---|
90. (ios/swift) 버튼 코드 (code) 사용해 생성 실시 - Button addSubview (0) | 2022.01.01 |
88. (ios/swift) 웹뷰 자바스크립트 통신 수행 시 에러 로그 확인 방법 (0) | 2021.12.30 |
87. (ios/swift) 앱 이름 명칭 변경 방법 - bundle display name (0) | 2021.12.28 |
86. (ios/swift) 아키텍처 arm64 중복 문제 및 에러 - 13 duplicate symbols for architecture arm64 (0) | 2021.12.27 |
Comments