투케이2K

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

투케이2K 유틸파일

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

투케이2K 2022. 6. 24. 08:16

[설 명]

프로그램 : Ios / Objective-C

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

 

 

 

[소스 코드]

import Foundation
import UIKit
import SafariServices


@objc class C_Intent: NSObject {
    
    
    // MARK: - [클래스 설명]
    /*
    // -----------------------------------------
    1. 모바일 설정, 애플리케이션 설정 인텐트 이동 클래스
    2. 인텐트 (settings) , 애플리케이션 , 메일 , 문자 , 전화 , 링크 설정창 이동 클래스
    // -----------------------------------------
    */
    
    
    
    
    
    // MARK: - [클래스 싱글톤 설정]
    @objc static let shared = C_Intent()
    
    
    
    
    
    // MARK: - [애플리케이션 설정창 이동 실시]
    @objc func goAppSetting() {
        
        /*
        // -----------------------------------------
        [goAppSetting 메소드 설명]
        // -----------------------------------------
        1. 애플리케이션 설정창 이동 수행 메소드
        // -----------------------------------------
        2. 호출 방법 : [[C_Intent shared] 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) 이동 실시]
    @objc 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. 호출 예시 : [[C_Intent shared] goTelIntentWith_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) 이동 실시]
    @objc 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. 호출 예시 : [[C_Intent shared] goMailIntentWith_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) 이동 실시]
    @objc 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. 호출 예시 : [[C_Intent shared] goSmsIntentWith_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: [하이퍼 링크 이동 실시]
    @objc 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. 호출 예시 : [[C_Intent shared] goLinkIntentWith_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: [:])
        }
    }
    
    
} // [클래스 종료]

 
반응형
Comments