앱케이크_appcake_하이브리드앱제작_Admin.png

파이어베이스에서 안드로이드와 iOS앱에서 사용가능한 다이내믹링크로 디퍼드딥링크 기능 사용이 가능합니다.

*디퍼드 딥링크란 모바일웹서비스로 공유된 링크를 통해 앱을 실행할수 있도록 해주며, 앱설치자들은 해당 링크로 앱실행후 이동되게 해주며, 앱 미설치자들은 스토어로 이동시켜주고 앱설치후 앱을 실행하면 처음에 공유된 링크로 앱화면이 이동이 되는기능을 말합니다.

*이 딥링크는 파이어베이스에서 제공된 기능을 통해 단축url을 앱내에서 생성하여 공유할 수 있도록 앱 기능개발이 가능하며, 파이어베이스에서 제공하는 다이내믹링크 관리화면에서도 수동으로 딥링크를 생성하여 사용할 수 있습니다.

*구글에서 ’25년9월부터 지원중단된다는 얘기가 있으며, 사용이 안되는경우 다른 솔루션등으로 업데이트가 필요할 수 있으니 참고부탁드리겠습니다.

1.앱내에서 딥링크 생성 연동

//웹에서 어느 페이지에서든 아래 js스크립트로 생성할 딥링크가 있다면 사용하면 됨.

// 앱단 메세지 핸들러 호출상태 체크 함수
function waitForCallHandler(callback_func, attempts = 0) {
    if (window.webkit && window.webkit.messageHandlers) {
        callback_func();
    } else if (attempts < 100) { // 100회까지 시도
        setTimeout(function() {
            waitForCallHandler(callback_func, attempts + 1); // 시도 횟수를 증가
        }, 100);
    } else {
        //console.log('waitForCallHandler: 최대 시도 횟수에 도달했습니다.');
    }
}

//메세지 핸들러 호출함수
waitForCallHandler(function() {
		//action=앱과 연동 명령어(변경하지 말고 그대로 사용)
		//target_url=딥링크 대상 full url 기입
		//getdeeplink=생성된 딥링크를 전달받을 js함수명으로 원하는 이름으로 기입(아래 정의필요합니다.)
    window.webkit.messageHandlers.cordova_iab.postMessage(JSON.stringify({"action": "deeplink_create","target_url": "딥링크생성 대상URL","callback": "getdeeplink"}));
});

function getdeeplink(deeplink){
	//전달받은 deeplink를 필요한 로직에 맞추어 사용하면 됨.
	alert(deeplink);
}

2.웹API를 사용한 딥링크 생성

//웹에서 어느 페이지에서든 아래 js스크립트로 다이내믹딥링크 생성이 가능함.

//아래 변수값중 빨간색의 값은 고정값으로, 작업진행시 알려드립니다.
//(숏링크변경 대상인 targetlink 변수값면 변경하여 사용하면됨)
api_key = 'AIzaSyBWWHFzKgTJsczShyfzzzzzzzzzz_w'//웹 api key**(변경x)**
domainuriprefix = '<https://testapp.page.link>';  //다이내믹링크로 사용할 도메인**(변경x)**
targetlink = '<https://www.testapp.com/board/view.php?&bdId=noevent&sno=46&main>';    //숏링크로 변경할 대상 URL 지정
androidpackagename = 'com.test.mobileapp';  //android앱 패키지명**(변경x)**
iosbundleid = 'com.test.mobileapp'; //ios앱 패키지명**(변경x)**
iosappstoreid = '1481234567';   //ios앱 스토어id 명시.**(변경x)**

$.ajax({
    url: '<https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key='+api_key>,
    type: 'POST',
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify({
        "dynamicLinkInfo": {
            "domainUriPrefix": domainuriprefix,
            "link": targetlink,
            "androidInfo": {
                "androidPackageName": androidpackagename
            },
            "iosInfo": {
                "iosBundleId":iosbundleid,
                "iosAppStoreId": iosappstoreid
            },
            "navigationInfo": {
                "enableForcedRedirect": true //다이내믹링크로 앱실행시 미리보기페이지 건너띄위고 곧바로 앱실행되도록 하는옵션(안될수도 있다고 함)**(변경x)**
            },
            "DynamicLinkSocialInfo": {  //옵션으로 미리보기페이지나 소셜공유시 사용되는정보(미사용시 기본 앱정보로 표시됨)
					      "socialTitle": "특급 이벤트 프로모션 진행",  //동적 링크가 소셜 게시물에 공유될 때 사용할 제목입니다.
					      "socialDescription": "더 많은 혜택이 기다리고 있어요!",  //동적 링크가 소셜 게시물에 공유될 때 사용할 설명입니다.
					      "socialImageLink": "<https://yourdomain.com/icon_1024.png>"  //이 링크와 관련된 이미지의 URL입니다.
            }
            
        }
    }),
    success: function(response) {
        //변환된 숏링크(다이내믹링크)
        console.log(JSON.stringify(response));
        console.log('변환된 숏링크(다이내믹링크) : ' + response.shortLink);
    },
    error: function(xhr) {
        
        console.log("ERROR : " + JSON.stringify(xhr));
    }
});

3.미리 수동으로 딥링크를 생성하여 사용