투케이2K

320. (ios/objc) 오브젝티브 씨 SceneDelegate 사용해 url scheme 스키마 접속 여부 확인 본문

IOS

320. (ios/objc) 오브젝티브 씨 SceneDelegate 사용해 url scheme 스키마 접속 여부 확인

투케이2K 2022. 11. 22. 15:50
반응형

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : Objc

 
 

[소스 코드]

#import "SceneDelegate.h"


// MARK: - [헤더 [선언부] 호출]
@interface SceneDelegate ()
@end
@implementation SceneDelegate



// MARK: - [클래스 설명]
/*
// -----------------------------------------
1. UI 딜리게이트 (구현부)
2. ios 13 이상 사용 : API_AVAILABLE(ios(13.0))
// -----------------------------------------
*/



// MARK: - [UI창 선택적 구성 및 제공된 UI창에 Scene 연결]
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions API_AVAILABLE(ios(13.0)){
    printf("\n");
    printf("=============================== \n");
    printf("[SceneDelegate >> willConnectTo] \n");
    printf("[설명 :: UI창 선택적 구성 및 제공된 UI창에 Scene 연결] \n");
    printf("=============================== \n");
    printf("\n");
    
    // [URL 접속 체크]
    NSSet *c = connectionOptions.URLContexts;
    if(c != nil && [c count] > 0){
        NSURL *url = ((UIOpenURLContext*)[[c allObjects] firstObject]).URL;
        printf("\n");
        printf("=============================== \n");
        printf("[SceneDelegate >> willConnectTo] \n");
        printf("[설명 :: URL 스키마 접속 체크 실시] \n");
        printf("[url :: %s] \n", url.absoluteString.description.UTF8String);
        printf("=============================== \n");
        printf("\n");
        
        // [스키마 접속 정보 저장]
        [[NSUserDefaults standardUserDefaults] setObject:@"willConnectTo" forKey:@"SCHEME_KEY"];
        [[NSUserDefaults standardUserDefaults] synchronize];

    }
}



// MARK: - [시스템에 의해서 Scene 해제 : background 상태 및 session 삭제]
- (void)sceneDidDisconnect:(UIScene *)scene API_AVAILABLE(ios(13.0)){
    printf("\n");
    printf("=============================== \n");
    printf("[SceneDelegate >> sceneDidDisconnect] \n");
    printf("[설명 :: 시스템에 의해서 Scene 해제 : background 상태 및 session 삭제] \n");
    printf("=============================== \n");
    printf("\n");
}



// MARK: - [Scene 활성화 및 사용자 이벤트에 응답 실시]
- (void)sceneDidBecomeActive:(UIScene *)scene API_AVAILABLE(ios(13.0)){
    printf("\n");
    printf("=============================== \n");
    printf("[SceneDelegate >> sceneDidBecomeActive] \n");
    printf("[설명 :: Scene 활성화 및 사용자 이벤트에 응답 실시] \n");
    printf("=============================== \n");
    printf("\n");
}



// MARK: - [Scene 활성 상태 해제 및 사용자 이벤트에 대한 응답 중지]
- (void)sceneWillResignActive:(UIScene *)scene API_AVAILABLE(ios(13.0)){
    printf("\n");
    printf("=============================== \n");
    printf("[SceneDelegate >> sceneWillResignActive] \n");
    printf("[설명 :: Scene 활성 상태 해제 및 사용자 이벤트에 대한 응답 중지] \n");
    printf("=============================== \n");
    printf("\n");
}



// MARK: - [Scene 포그라운드 실행]
- (void)sceneWillEnterForeground:(UIScene *)scene API_AVAILABLE(ios(13.0)){
    printf("\n");
    printf("=============================== \n");
    printf("[SceneDelegate >> sceneWillEnterForeground] \n");
    printf("[설명 : Scene 포그라운드 실행] \n");
    printf("=============================== \n");
    printf("\n");
}



// MARK: - [Scene 백그라운드 실행]
- (void)sceneDidEnterBackground:(UIScene *)scene API_AVAILABLE(ios(13.0)){
    printf("\n");
    printf("=============================== \n");
    printf("[SceneDelegate >> sceneDidEnterBackground] \n");
    printf("[설명 : Scene 백그라운드 실행] \n");
    printf("=============================== \n");
    printf("\n");
}



// MARK: - [URL 스키마 접속 체크 부분]
- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts API_AVAILABLE(ios(13.0)){
    NSURL *schemeUrl = [[URLContexts allObjects] firstObject].URL;
    printf("\n");
    printf("=============================== \n");
    printf("[SceneDelegate >> openURLContexts] \n");
    printf("[설명 : URL 스키마 접속 체크 실시] \n");
    printf("[schemeUrl : %s] \n", schemeUrl.absoluteString.description.UTF8String);
    printf("=============================== \n");
    printf("\n");
    
    // [스키마 접속 정보 저장]
    [[NSUserDefaults standardUserDefaults] setObject:@"openURLContexts" forKey:@"SCHEME_KEY"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}



// -----------------------------------------
@end
// -----------------------------------------
 

[결과 출력]


반응형
Comments