Apple iOS 에서 딥 링크로 유니버설 링크 설정하는 방법

업데이트: 이 내용은 원래 2015년 7월 24일에 게시되었지만 최신 iOS 9.2 관련 정보로 업데이트되었습니다. Apple이 더 이상 딥 링크를 위한 URI스킴을 지원하지 않기 때문에, 개발자들은 iOS에서 올바른 딥 링크를 위해 유니버설 링크를 실행해야 합니다. URI 스킴을 이미 사용하는 경우유니버설 링크로 이행하는 것에 대해 알아보려면 우리 블로그를 확인하십시오.

우리 Branch는 모바일 딥 링크에 대해 모든 것을 다룹니다. 모든 플랫폼, 모든 기기, 모든 앱 스토어를 사용하여 어디에서든 귀하의 앱으로 연결할 수 있는 단일 링크를 제작했습니다. 여러분의 앱을 모든 채널(Facebook, Twitter, Gmail 등)에 연결하고 모든 검색 포털(Google App Indexing, Bing search, Apple Spotlight) 목록에 오르도록 완전히 구성된 단일 링크입니다.

제대로 기능합니다. 사실, 이미Google App Indexing설정 방법과 Facebook에서 딥 링크 거는 방법에 대해 블로그에 게시물로 올려 놓았으니 확인해 보십시오.

Apple이 최근 WWDC 행사에서 유니버설 링크를 발표했을 때 우리는 Branch 딥 링크 플랫폼에 통합하게 될 생각에 매우 기뻤습니다. 그때까지만 해도 제대로 실행하도록 하는 것이 얼마나 복잡한 일인지 거의 몰랐습니다. 이 작업에 너무 많은 시간이 소요되고 관련 문서가 너무 부족하여 우리는 다른 모든 사람들을 위해 그 작업 방법에 대한 지침을 공유하는 것이 좋겠다고 생각했습니다.

iOS 9에서 유니버설 링크가 작동하는 방식은?

유니버설 링크 이전에는 앱을 설치했을 때 앱을 여는 주요 메커니즘은 Safari에서 앱의 URI 스킴(앱의 PLIST 등에 등록된)로 리디렉션하는 것이었습니다. 이것은 Safari에서 라우팅 로직을 사용하는 것이지만 앱의 설치 여부를 확인하는 방법이 없었습니다. 이는 혹시라도 앱이 설치된 다음에 타이머를 사용하지 않았을 때 앱 스토어에 정상적으로 폴백하는 경우, 개발자는 해당 시간 내내 100 % URI 스킴을 호출하기 위해 애써야 하는 것을 의미합니다.

iOS 9 유니버설 링크는 이 문제를 수정하기 위한 것입니다. 링크를 클릭했을 때 Safari를 먼저 여는 대신, iOS는 링크와 관련된 도메인에 대해 유니버설 링크가 등록되어 있는지 확인한 다음 해당 앱이 설치되어 있는지 확인합니다. 앱이 현재 설치되어 있으면 앱이 열립니다. 그렇지 않을 경우, Safari가 열리고 http(s) 링크가 로드됩니다.

기능적으로, 그렇게 되면 앱이나 모바일 사이트를 열어 줄 단일 링크를 갖게되는 것입니다.

유니버설 링크 통합 가이드

앱에서 유니버설 링크를 작동시키기 위한 절차는 다음과 같습니다.

1. 승인된 도메인을 등록하도록 앱 구성
  1. developer.apple.com에서 앱을 등록합니다.
  2. App ID에서 관련 도메인을 활성화합니다.
  3. Xcode 프로젝트에서 관련 도메인을 활성화합니다.
  4. 적절한 도메인 권한을 추가합니다.
  5. 권한 파일이 빌드에 포함되어 있는지 확인합니다.
    Branch를 사용하는 경우, 여기서 중단해도 됩니다. 그렇지 않으면, 섹션 2로 진행하십시오.

Branch를 사용하는 경우, 여기서 중단해도 됩니다. 그렇지 않으면, 섹션 2로 진행하십시오.

2. 웹사이트를 구성해서 apple-app-site-association 파일을 호스팅
  1. 도메인 네임을 구입하거나 기존 도메인에서 선택합니다.
  2. 도메인 네임에 대한 SSL 인증을 획득합니다.
  3. 구조화된 apple-app-site-association JSON 파일을 생성합니다.
  4. JSON 파일을 SSL 인증으로 서명합니다.
  5. 파일 서버를 구성합니다.

Branch 서비스를 사용하는 경우, SSL 인증을 만들어 서버의 JSON 파일을 서명하고 호스팅하는 번거로움을 덜 수 있어, 앱의 코드를 수정만 하면 활용할 수 있습니다. 게시물 하단을 보면 이에 대한 내용이 나옵니다.

참고: 또한 apple-app-site-association 파일이 올바르게 구성되었는지 여부를 확인하기 위한도구를 제작했습니다.

섹션 1: 앱 권한 구성

유니버설 링크를 위한 Xcode 프로젝트를 등록하려면, Apple 개발자 포털에서 App ID를 만들어 적절한 권한을 활성화해야 합니다. 이것은 인-앱 구입에 필요한 구성과 매우 유사합니다.

유니버설 링크에는 와일드카드 App ID를 사용할 수 없습니다.

앱을 developers.apple.com에 등록

먼저 developer.apple.com으로 가서 로그인하십시오. 그런 다음 Certificate, Identifiers & Profiles을 클릭하고 이어서 Identifiers를 클릭하십시오.

App ID를 아직 등록하지 않은 경우, + 기호를 클릭해서 한 개를 만들어야 합니다. 가지고 있을 경우, 다음 섹션으로 진행하십시오.

여기서 2개의 필드 즉 이름과 번들 ID를 기입해야 합니다. 이름의 경우, 원하는 이름을 임의로 입력하면 됩니다. 번들 ID의 경우, 번들 값을 입력해야 합니다.

적절한 빌드 대상을 위해 Xcode 프로젝트의 일반 탭에서 검색하여 불러올 수 있습니다.

developers.apple.com의 App ID에서 Associated Domains 활성화

기존의 혹은 작업 중인 App ID의 경우, 최신 섹션까지 스크롤다운하여 Associated Domains 서비스를 체크 표시하십시오.

스크롤다운하여 Save를 클릭하십시오.

Xcode 프로젝트에서 Associated Domains 활성화

이제 Xcode 프로젝트내에서 Associated Domains 권한을 활성화할 수 있습니다. 먼저, Xcode 프로젝트가 자신의 App ID를 방금 등록했던 것과 동일한 팀을 선택했는지 확인하십시오. 그런 다음 프로젝트 파일의 Capabilities 탭으로 이동하십시오.

스크롤다운하여 아코디온이 확장되도록 Associated Domains을 활성화하십시오.

이와 같은 오류가 보이면 다음을 확인하십시오.

  1. 올바른 팀을 선택했는지 여부
  2. Xcode 프로젝트의 번들 식별자가 App ID 등록에 사용되는 식별자와의 일치 여부
도메인 권한 추가

도메인 섹션에서 적절한 도메인 태그를 추가하십시오. applinks:로 접두어를 붙여야 합니다. 이 경우, applinks:yourdomain.com이 추가된 것을 볼 수 있습니다.

권한 파일이 빌드에 포함되어 있는지 확인

마지막으로, 어떤 이유로, Xcode 7가 내 권한 파일을 내 빌드에 포함시키지 않았습니다. 프로젝트 브라우저에서, 새로운 권한 파일이 구축되도록 올바른 타겟에 멤버십이 선택되었는지 확인하십시오.

Branch 링크를 사용하는 경우, 여기에서 멈출 수 있습니다! 그렇지 않은 경우, 계속 읽거나 아래 버튼을 눌러 통합을 시작하십시오.

골치 아픈 시간을 줄이고 싶으면, 모든 JSON 호스팅과 SSL 인증 작업을 하지 않고Branch 링크를 사용해서 호스팅할 수 있습니다.
https://dev.branch.io/recipes/branch_universal_links
그러나, 고생스러워도 만사를 뜻대로 해야 직성이 풀린다면 그냥 계속하십시오.

섹션 2: apple-app-site-association 파일 구성

유니버설 링크는 웹사이트 URL을 앱 링크로 전환하므로, 링크를 활용하기 위해 웹 서버를 가동해야 합니다. 이 프로세스를 돕기 위해, 유니버설 링크 검사기를 사용해서 파일이 제대로 구성되었는지 확인하십시오.

도메인 선정

먼저, 유니버설 링크에 사용하려는 도메인을 확인하십시오. 새로운 도메인을 등록하거나 기존 도메인을 사용하십시오. 새 도메인을 등록하는 경우, 우리는 gandi.net와 같이 깨끗하고 스팸을 보내지 않는 등록업체 사용을 선호합니다.

SSL 인증 획득

유니버설 링크 호스팅을 위해 사용할 도메인에 대해 SSL 인증 파일을 획득해야 합니다. 이를 위해서는 외부 서비스를 이용하여 SSL용 도메인을 등록해야 하고, 필요한 파일을 생성해야 합니다. 외부 서비스업체를 찾아 본 끝에 우리는 branch.io 및 관련 하위 도메인들을 처리하기 위해 Digicert를 선택했습니다

SSL 인증을 생성하기 위한 위한 절차는 다음과 같습니다.

  1. https://www.digicert.com/easy-csr/openssl.htm을 방문하여 상단에 있는 양식을 작성한 다음 openSSL 명령을 생성합니다. 이 창을 계속 열어 두십시오.
  2. 원격 서버에 로그인합니다.
  3. OpenSSL 명령을 실행해서 인증 서명 요청(.csr)과 인증 파일(.cert)를 생성합니다.
  4. https://www.digicert.com/welcome/ssl-plus.htm에서 SSL 인증에 대한 비용을 지불합니다.
  5. Digicert가 승인하고 최종 파일들을 전송할 때까지 기다립니다.
  6. 마지막으로, yourdomain.com.cert, yourdomain.com.key 그리고 digicertintermediate.cert를 원격 서버의 동일한 디렉터리로 옮깁니다.
    Apple-app-site-association JSON 생성
이 JSON 파일은 엄격한 표준 구조로 되어 있어서 기본적으로 이 버전을 복사한

다음 필요에 맞춰 편집하기만 하면 됩니다. 아래와 같이 분류해 놓았으니 정확한 값을 확인할 수 있습니다.

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "T5TQ36Q2SQ.com.branch.sdk.TestBed",
        "paths": ["*"]
      }
    ]
  }
}

변경해야 할 유일한 필드들은 T5TQ36Q2SQ.com.branch.sdk.TestBed의 형태가 됩니다. 이것은 사실 마침표와 함께 결합된 2개의 값입니다. 두 값은 Identifiers -> App IDs 섹션의 evelopers.apple.com에서 확인할 수 있습니다. 아래 표시된 것처럼 해당 등록된 App ID를 클릭하십시오.

이 예시에서, 접두사와 ID가 마침표와 함께 연결하면 T5TQ36Q2SQ.com.branch.sdk.TestBed의 형태가 됩니다.

이 JSON 파일을 apple-app-site-association-unsigned로 저장하십시오.

JSON 파일을 SSL 인증으로 서명

참고: 도메인을 HTTPS로 인증한 경우, 이 단계를 건너뛰고 JSON을 일반 텍스트 형식으로 전송할 수 있습니다.Apple’s updated requirements:

Apple-app-site-association-unsigned 파일을 서버로 업로드하여 이전 단계의 인증과 키 파일과 동일한 디렉터리에 저장하십시오. 명령줄을 사용하여 디렉터리를 해당 폴더로 변경하고 다음과 같은 명령을 작성하십시오.

cat apple-app-site-association-unsigned | openssl smime -sign -inkey yourdomain.com.key -signer yourdomain.com.cert -certfile digicertintermediate.cert -noattr -nodetach -outform DER > apple-app-site-association

그러면 apple-app-site-association 파일이 생성됩니다.

파일 서버 구성

이제 apple-app-site-association 파일에 서명을 하셨습니다. 이제 파일 서버를 구성해서 이것을 호스팅하기만 하면 됩니다. 다음과 같이 몇 가지 주의 사항이 있습니다.

  1. application/pkcs7-mime 헤더와 함께 전송되어야 합니다.
  2. Youdomain.com/apple-app-site-association 엔드포인트에서 전송되어야 합니다.
  3. 200 http 코드를 반송해야 합니다.

우리의 Node+Express 링크 서버를 사용해서 모든 Branch 통합 앱을 위한 코드를 설정했습니다. 도움이 될 수 있도록 사용했던 코드를 아래에 공개합니다.

var aasa = fs.readFileSync(__dirname + '/static/apple-app-site-association');
app.get('/apple-app-site-association', function(req, res, next) {
     res.set('Content-Type', 'application/json');
     res.status(200).send(aasa);
});

Branch 및 iOS 9 범용 링크 통합 가이드

다시 한 번 말씀드리면, 모든 JSON 호스팅과 SSL 인증 작업을 하지 않고 Branch 링크만 사용해서 호스팅을 할 수 있습니다.

TO LEARN MORE ABOUT BRANCH'S
PRODUCTS AND SERVICES

Request a demo