본문 바로가기
IT일반

Firebase 다이나믹 링크 자동으로 생성기 (구글 스프레드시트 이용)

by xavi2019 2021. 12. 21.

Rest API를 이용하여 다이나믹 링크를 자동으로 생성하는 방법 

 

1. 웹 API 키

Firebase Console에서 Web API Key를 가져옵니다.
(그 전에 다이나믹 링크용 도메인 prefix설정을 먼저 해야 합니다)

2. Rest API

ㅇAPI endpoint(URL)

- https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=웹API키 

ㅇ Header

- Content-Type: application/json

ㅇMethod

- post

Body

{
    "dynamicLinkInfo": {
        "domainUriPrefix": "https://도메인프리픽스.page.link",
        "link": "여러분의URL?utm_source=sms&utm_medium=message&utm_campaign=test",
        "androidInfo": {
            "androidPackageName": "Android앱번들ID"
        },
        "iosInfo": {
            "iosBundleId": "Android앱번들ID"
        },
        "navigationInfo": {
            "enableForcedRedirect": true
        },
        "analyticsInfo": {
            "googlePlayAnalytics": {
                "utmSource": "sms",
                "utmMedium": "message",
                "utmCampaign": "test",
                "utmTerm": "",
                "utmContent": "",
                "gclid": ""
            },
            "itunesConnectAnalytics": {
                "at": "",
                "ct": "",
                "mt": "",
                "pt": ""
            }
        }
    },
    "suffix": {
        "option": "SHORT"
    }
}

 

구글 스프레드 시트용 스크립트 작성

1. Apps Script를 메뉴에서 연다.

2. 아래 스크립트를 작성한다.

3. 삽입 - 그림 으로 대략 버튼을 만들어 넣는다.

4. 스크립트를 할당한다.

 

function createLink() {

  var confirm = Browser.msgBox('다이나믹 링크를 생성하겠습니까?', Browser.Buttons.YES_NO); 
  if(confirm != 'yes'){return};

  var ss = SpreadsheetApp.getActiveSpreadsheet(); //get active spreadsheet (bound to this script)
  var sheet = ss.getSheets()[0];


  var apiKey = '여러분의웹API키';
  var apiUrl = 'https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=' + apiKey;

  var offset = 0;
  var execute_line = 1002;
  var utm_source = "";
  var utm_medium = "";
  var utm_campaign = "";
  var utm_term = "";
  var utm_content = "";

  var utm_url = "";
  var landing_url = "";
  var dynamic_link = "";


  for(var row=2; row < execute_line ; row++){       
    utm_source = sheet.getRange(row, offset + 1).getValue();
    utm_medium = sheet.getRange(row, offset + 2).getValue();
    utm_campaign = sheet.getRange(row, offset + 3).getValue();
    utm_term = sheet.getRange(row, offset + 4).getValue();
    utm_content = sheet.getRange(row, offset + 5).getValue();
    landing_url = sheet.getRange(row, offset + 6).getValue();
    utm_url = sheet.getRange(row, offset + 7).getValue();
    dynamic_link = sheet.getRange(row, offset + 8).getValue();
    var delimeter = "?";

    if (dynamic_link == "") {
      if (landing_url != "") {
        console.log("UTM URL("+(row-1)+"): " + utm_url);
        if (landing_url.indexOf("?") > -1) {
          delimeter = "&";
        }

        // Make a POST request with a JSON payload.
        var data = {
          "dynamicLinkInfo": {
              "domainUriPrefix": "https://여러분의도메인prefix.page.link",
              "link": landing_url + delimeter + "utm_source="+utm_source+"&utm_medium="+utm_medium+"&utm_campaign="+utm_campaign+"&utm_term="+utm_term+"&utm_content="+utm_content,
              "androidInfo": {
                  "androidPackageName": "안드로이드앱번들ID"
              },
              "iosInfo": {
                  "iosBundleId": "ios앱번들ID"
              },
              "navigationInfo": {
                  "enableForcedRedirect": true
              },
              "analyticsInfo": {
                  "googlePlayAnalytics": {
                      "utmSource": utm_source,
                      "utmMedium": utm_medium,
                      "utmCampaign": utm_campaign,
                      "utmTerm": utm_term,
                      "utmContent": "",
                      "gclid": ""
                  },
                  "itunesConnectAnalytics": {
                      "at": "",
                      "ct": "",
                      "mt": "",
                      "pt": ""
                  }
              }
          },
          "suffix": {
              "option": "SHORT"
          }
        };
        var options = {
          'method' : 'post',
          'contentType': 'application/json',
          // Convert the JavaScript object to a JSON string.
          'payload' : JSON.stringify(data)
        };
        console.log(apiUrl);
        console.log(options);
        // return;
        var response = UrlFetchApp.fetch(apiUrl, options); // get api endpoint
        var json = response.getContentText(); // get the response content as text
        var result = JSON.parse(json); //parse text into json
        Logger.log(result); //log data to logger
        // var stats=[]; //create empty array to hold data points
        var date = new Date(); //create new date for timestamp
        //The number in brackets refers to which instance we are looking at - soonest upcoming call is [0], next after that is [1], etc.
        // stats.push(result.shortLink);
        // stats.push(date); //timestamp
        // //append the stats array to the active sheet 
        // sheet.appendRow(stats);
        sheet.getRange(row, offset + 8).setValue(result.shortLink);
        sheet.getRange(row, offset + 9).setValue(date);
        // return;
        
      } else {
        break;
      } // if (landing_url != "") {
    } // if (dynamic_link == "") {
  } // for(var row=2; row < 6 ; row++){ 
  
}

문서 포맷

댓글