Notice
Recent Posts
Recent Comments
Link
투케이2K
34. (TWOK/ERROR) [Ios] url scheme 스키마 외부 앱 실행 및 앱 스토어 이동 실시 - canOpenURL always true and false 본문
투케이2K 에러관리
34. (TWOK/ERROR) [Ios] url scheme 스키마 외부 앱 실행 및 앱 스토어 이동 실시 - canOpenURL always true and false
투케이2K 2022. 4. 10. 19:17[환경 설정 및 설명]
프로그램 : Xcode
설 명 : url scheme 스키마 외부 앱 실행 및 앱 스토어 이동 실시 - canOpenURL always true and false
[에러 원인]
1. 사용자의 모바일 기본 브라우저 설정이 사파리가 아닌 크롬으로 되어있는 경우 발생하는 이슈
[해결 방법]
1. 앱 실행 및 앱 스토어 이동 > UIApplication.shared.open 을 사용해 success 판단 후 앱 스토어 이동 실시
// MARK: [외부 앱 실행 실시]
// [SEARCH FAST] : [외부 이동]
/*
1. https://www.apple.com/kr/ 사이트에 접속해서 특정 앱 주소를 확인합니다
2. 크롬 앱 id 확인 : https://apps.apple.com/kr/app/google-chrome/id535886823 [id535886823 부분을 사용해서 외부앱을 실행합니다]
3. 크롬 스키마 확인 : googlechrome://
4. 로직 : 외부앱 설치되었을 경우 >> 외부앱 실행 (스키마) / 외부앱이 설치되지 않은 경우 앱 스토어 이동 (앱 id)
5. 호출 예시 : goAppRun(_scheme: "googlechrome://", _id: "id535886823")
*/
func goAppRun(_scheme : String, _id : String) {
// [메인 큐에서 비동기 방식 실행 : UI 동작 실시]
DispatchQueue.main.async {
let _appSchme = _scheme
let _storeUrl = "itms-apps://itunes.apple.com/app/" + _id
print("")
print("====================================")
print("[S_Extension >> goAppRun :: 외부 앱 실행 실시]")
print("_appSchme :: ", _appSchme)
print("_storeUrl :: ", _storeUrl)
print("====================================")
print("")
// [URL 타입 체크 실시]
guard let appsUrl = URL(string: _appSchme)
else {
print("")
print("====================================")
print("[S_Extension >> goAppRun :: 외부 앱 실행 실시]")
print("error :: ", "URL 파싱 에러")
print("====================================")
print("")
return
}
// [외부 앱 실행 실시]
UIApplication.shared.open(appsUrl, completionHandler: { (success) in
if (success) {
print("")
print("====================================")
print("[S_Extension >> goAppRun :: 외부 앱 열기 수행]")
print("_appSchme :: ", _appSchme)
print("_storeUrl :: ", _storeUrl)
print("====================================")
print("")
}
else {
// 외부앱 이동 로직 처리 실시
if let openStore = URL(string: _storeUrl), UIApplication.shared.canOpenURL(openStore) {
print("")
print("====================================")
print("[S_Extension >> goAppRun :: 앱 스토어 이동 실시]")
print("_appSchme :: ", _appSchme)
print("_storeUrl :: ", _storeUrl)
print("====================================")
print("")
// 버전별 처리 실시
if #available(iOS 10.0, *) {
UIApplication.shared.open(openStore, options: [:], completionHandler: nil)
}
else {
UIApplication.shared.openURL(openStore)
}
}
}
})
}
}
2. 앱 설치 여부 판단 > 크롬으로 기본브라우저 설정 시 추가적으로 LSApplicationQueriesSchemes 에서 http , https 를 등록 실시
// MARK: [특정 앱 설치 여부 확인]
/*
1. 크롬 앱 스키마 확인 : googlechrome://
2. 호출 예시 : self.checkInstallApp(_scheme: "googlechrome://")
3. 참고 [1] : canOpenURL 사용 시는 LSApplicationQueriesSchemes 에서 스키마 명을 등록해줘야한다 [googlechrome]
4. 참고 [2] : 크롬으로 기본브라우저 설정 시 추가적으로 LSApplicationQueriesSchemes 에서 http , https 를 등록해줘야한다
*/
func checkInstallApp(_scheme : String) {
// [메인 큐에서 비동기 방식 실행 : UI 동작 실시]
DispatchQueue.main.async {
print("")
print("====================================")
print("[S_Extension >> checkInstallApp :: 외부 앱 설치 여부 확인]")
print("_scheme :: ", _scheme)
print("====================================")
print("")
// [URL 타입 체크 실시]
if _scheme != nil && _scheme.count > 0 && _scheme.equals(_string: "") == false {
// 외부앱 이동 로직 처리 실시
if let openStore = URL(string: _scheme), UIApplication.shared.canOpenURL(openStore) {
print("")
print("====================================")
print("[S_Extension >> checkInstallApp :: 외부 앱 설치 된 상태]")
print("_scheme :: ", _scheme)
print("====================================")
print("")
}
else {
print("")
print("====================================")
print("[S_Extension >> checkInstallApp :: 외부 앱 설치 안된 상태]")
print("_scheme :: ", _scheme)
print("====================================")
print("")
}
}
else {
print("")
print("====================================")
print("[S_Extension >> checkInstallApp :: 외부 앱 설치 상태 확인 실패]")
print("error :: ", "_scheme 값 널 임")
print("====================================")
print("")
}
}
}
반응형
'투케이2K 에러관리' 카테고리의 다른 글
Comments