투케이2K

22. (TWOK/UTIL) [Ios/Swift] C_Intent - 인텐트 (settings) , 애플리케이션 , 메일 , 문자 , 전화 , 링크 설정창 이동 클래스 본문

투케이2K 유틸파일

22. (TWOK/UTIL) [Ios/Swift] C_Intent - 인텐트 (settings) , 애플리케이션 , 메일 , 문자 , 전화 , 링크 설정창 이동 클래스

투케이2K 2022. 3. 26. 11:10

[설 명]

프로그램 : Ios / Swift

설 명 : 인텐트 (settings) , 애플리케이션 , 메일 , 문자 , 전화 , 링크 설정창 이동 클래스

 

[소스 코드]

 

import Foundation
import UIKit
import SafariServices


// MARK: [extension 정의 실시 : 뷰 컨트롤러]
extension UIViewController {
    
    
    // MARK: - [클래스 설명]
    /*
    // -----------------------------------------
    1. 모바일 설정, 애플리케이션 설정 인텐트 이동 클래스
    2. 인텐트 (settings) , 애플리케이션 , 메일 , 문자 , 전화 , 링크 설정창 이동 클래스
    // -----------------------------------------
    */
    
    
    
    
    
    // MARK: - [애플리케이션 설정창 이동 실시]
    func goAppSetting() {
        
        /*
        // -----------------------------------------
        [goAppSetting 메소드 설명]
        // -----------------------------------------
        1. 애플리케이션 설정창 이동 수행 메소드
        // -----------------------------------------
        2. 호출 방법 : self.goAppSetting()
        // -----------------------------------------
        */
        
        // [메인 큐에서 비동기 방식 실행 : UI 동작 실시]
        DispatchQueue.main.async {
            
            //if let url = URL(string: C_Util().getMobilePackageName()) {
            if let url = URL(string: UIApplication.openSettingsURLString) {
                print("")
                print("====================================")
                print("[C_Intent >> goAppSetting() :: [앱 설정] 화면 이동 수행]")
                print("====================================")
                print("")
                
                // [이동 수행 실시]
                UIApplication.shared.open(url, options: [:], completionHandler: nil)
            }
            else {
                print("")
                print("====================================")
                print("[C_Intent >> goAppSetting() :: [앱 설정] 화면 이동 실패]")
                print("====================================")
                print("")
            }
        }
    }
    
    
    
    
    
    // MARK: [전화 (tel) 이동 실시]
    func goTelIntent(_url : String) {
        
        /*
        // -----------------------------------------
        [goTelIntent 메소드 설명]
        // -----------------------------------------
        1. tel , mailto , sms , l 등을 사용해 디바이스 외부 앱을 수행할 수 있습니다
        // -----------------------------------------
        2. 전화 걸기 : tel:010-1234-5678
        // -----------------------------------------
        3. 메일 보내기 : mailto:honggildung@test.com
        // -----------------------------------------
        4. 문자 보내기 : sms:010-5678-1234
        // -----------------------------------------
        5. 링크 이동 : l:https://naver.com
        // -----------------------------------------
        6. 호출 예시 : self.goTelIntent(_url: "tel:010-1234-5678")
        // -----------------------------------------
        */
        
        // [메인 큐에서 비동기 방식 실행 : UI 동작 실시]
        DispatchQueue.main.async {
            
            // [사전 인풋 값 널 데이터 체크 수행 실시]
            if _url != nil && _url.count>0 && _url != "" && _url.hasPrefix("tel"){
            }
            else {
                print("")
                print("====================================")
                print("[C_Intent >> goTelIntent() :: [전화] 이동 실패]")
                print("-------------------------------")
                print("error :: 사전 인풋 데이터 체크 에러")
                print("-------------------------------")
                print("_url :: \(_url)")
                print("====================================")
                print("")
                
                // [리턴 종료]
                return
            }
            
            // [스키마명을 사용해 외부앱 실행 실시 [사용가능한 url 확인]]
            if let openApp = URL(string: _url), UIApplication.shared.canOpenURL(openApp) {
                print("")
                print("====================================")
                print("[C_Intent >> goTelIntent() :: [전화] 이동 수행]")
                print("-------------------------------")
                print("_url :: \(_url)")
                print("====================================")
                print("")
                
                // [버전별 처리 실시]
                if #available(iOS 10.0, *) {
                    UIApplication.shared.open(openApp, options: [:], completionHandler: nil)
                }
                else {
                    UIApplication.shared.openURL(openApp)
                }
            }
            //스키마명을 사용해 외부앱 실행이 불가능한 경우
            else {
                print("")
                print("====================================")
                print("[C_Intent >> goTelIntent() :: [전화] 이동 실패]")
                print("-------------------------------")
                print("_url :: \(_url)")
                print("====================================")
                print("")
            }
        }
    }
    
    
    
    
    
    // MARK: [메일 (mail) 이동 실시]
    func goMailIntent(_url : String) {
        
        /*
        // -----------------------------------------
        [goMailIntent 메소드 설명]
        // -----------------------------------------
        1. tel , mailto , sms , l 등을 사용해 디바이스 외부 앱을 수행할 수 있습니다
        // -----------------------------------------
        2. 전화 걸기 : tel:010-1234-5678
        // -----------------------------------------
        3. 메일 보내기 : mailto:honggildung@test.com
        // -----------------------------------------
        4. 문자 보내기 : sms:010-5678-1234
        // -----------------------------------------
        5. 링크 이동 : l:https://naver.com
        // -----------------------------------------
        6. 호출 예시 : self.goMailIntent(_url: "mailto:honggildung@test.com")
        // -----------------------------------------
        */
        
        // [메인 큐에서 비동기 방식 실행 : UI 동작 실시]
        DispatchQueue.main.async {
            
            // [사전 인풋 값 널 데이터 체크 수행 실시]
            if _url != nil && _url.count>0 && _url != "" && _url.hasPrefix("mailto"){
            }
            else {
                print("")
                print("====================================")
                print("[C_Intent >> goMailIntent() :: [메일] 이동 실패]")
                print("-------------------------------")
                print("error :: 사전 인풋 데이터 체크 에러")
                print("-------------------------------")
                print("_url :: \(_url)")
                print("====================================")
                print("")
                
                // [리턴 종료]
                return
            }
            
            // [스키마명을 사용해 외부앱 실행 실시 [사용가능한 url 확인]]
            if let openApp = URL(string: _url), UIApplication.shared.canOpenURL(openApp) {
                print("")
                print("====================================")
                print("[C_Intent >> goMailIntent() :: [메일] 이동 수행]")
                print("-------------------------------")
                print("_url :: \(_url)")
                print("====================================")
                print("")
                
                // [버전별 처리 실시]
                if #available(iOS 10.0, *) {
                    UIApplication.shared.open(openApp, options: [:], completionHandler: nil)
                }
                else {
                    UIApplication.shared.openURL(openApp)
                }
            }
            //스키마명을 사용해 외부앱 실행이 불가능한 경우
            else {
                print("")
                print("====================================")
                print("[C_Intent >> goMailIntent() :: [메일] 이동 실패]")
                print("-------------------------------")
                print("_url :: \(_url)")
                print("====================================")
                print("")
            }
        }
    }
    
    
    
    
    
    // MARK: [문자 (sms) 이동 실시]
    func goSmsIntent(_url : String) {
        
        /*
        // -----------------------------------------
        [goSmsIntent 메소드 설명]
        // -----------------------------------------
        1. tel , mailto , sms , l 등을 사용해 디바이스 외부 앱을 수행할 수 있습니다
        // -----------------------------------------
        2. 전화 걸기 : tel:010-1234-5678
        // -----------------------------------------
        3. 메일 보내기 : mailto:honggildung@test.com
        // -----------------------------------------
        4. 문자 보내기 : sms:010-5678-1234
        // -----------------------------------------
        5. 링크 이동 : l:https://naver.com
        // -----------------------------------------
        6. 호출 예시 : self.goSmsIntent(_url: "sms:010-5678-1234")
        // -----------------------------------------
        */
        
        // [메인 큐에서 비동기 방식 실행 : UI 동작 실시]
        DispatchQueue.main.async {
            
            // [사전 인풋 값 널 데이터 체크 수행 실시]
            if _url != nil && _url.count>0 && _url != "" && _url.hasPrefix("sms"){
            }
            else {
                print("")
                print("====================================")
                print("[C_Intent >> goSmsIntent() :: [문자] 이동 실패]")
                print("-------------------------------")
                print("error :: 사전 인풋 데이터 체크 에러")
                print("-------------------------------")
                print("_url :: \(_url)")
                print("====================================")
                print("")
                
                // [리턴 종료]
                return
            }
            
            // [스키마명을 사용해 외부앱 실행 실시 [사용가능한 url 확인]]
            if let openApp = URL(string: _url), UIApplication.shared.canOpenURL(openApp) {
                print("")
                print("====================================")
                print("[C_Intent >> goSmsIntent() :: [문자] 이동 수행]")
                print("-------------------------------")
                print("_url :: \(_url)")
                print("====================================")
                print("")
                
                // [버전별 처리 실시]
                if #available(iOS 10.0, *) {
                    UIApplication.shared.open(openApp, options: [:], completionHandler: nil)
                }
                else {
                    UIApplication.shared.openURL(openApp)
                }
            }
            //스키마명을 사용해 외부앱 실행이 불가능한 경우
            else {
                print("")
                print("====================================")
                print("[C_Intent >> goSmsIntent() :: [문자] 이동 실패]")
                print("-------------------------------")
                print("_url :: \(_url)")
                print("====================================")
                print("")
            }
        }
    }
    
    
    
    
    
    // MARK: [하이퍼 링크 이동 실시]
    func goLinkIntent(_url : String) {
        
        /*
        // -----------------------------------------
        [goLinkIntent 메소드 설명]
        // -----------------------------------------
        1. tel , mailto , sms , l 등을 사용해 디바이스 외부 앱을 수행할 수 있습니다
        // -----------------------------------------
        2. 전화 걸기 : tel:010-1234-5678
        // -----------------------------------------
        3. 메일 보내기 : mailto:honggildung@test.com
        // -----------------------------------------
        4. 문자 보내기 : sms:010-5678-1234
        // -----------------------------------------
        5. 링크 이동 : l:https://naver.com
        // -----------------------------------------
        6. 호출 예시 : self.goLinkIntent(_url: "l:https://naver.com")
        // -----------------------------------------
        */
        
        // [메인 큐에서 비동기 방식 실행 : UI 동작 실시]
        DispatchQueue.main.async {
            
            // [사전 인풋 값 널 데이터 체크 수행 실시]
            if _url != nil && _url.count>0 && _url != "" && _url.hasPrefix("l:")
                && _url.contains("http") == true || _url.contains("https") == true {
            }
            else {
                print("")
                print("====================================")
                print("[C_Intent >> goLinkIntent() :: [하이퍼링크] 이동 실패]")
                print("-------------------------------")
                print("error :: 사전 인풋 데이터 체크 에러")
                print("-------------------------------")
                print("_url :: \(_url)")
                print("====================================")
                print("")
                
                // [리턴 종료]
                return
            }
            
            // [l: 문자열 제거 및 원본 url 데이터 만들기]
            let link = String(describing: _url.suffix(_url.count - 2))
            
            // [로그 출력 실시]
            print("")
            print("====================================")
            print("[C_Intent >> goLinkIntent() :: [하이퍼링크] 이동 수행]")
            print("-------------------------------")
            print("_url :: \(link)")
            print("====================================")
            print("")
            
            // [외부 링크 이동 수행 실시]
            UIApplication.shared.open(URL(string: link)!, options: [:])
        }
    }
    
    
} // [extension 종료]

반응형
Comments