티스토리 뷰

Android

[Android] Firebase Dynamic Link

cherishee 2019. 10. 21. 21:07

먼저 Firebase에서 메뉴얼에 맞게 프로젝트를 생성한다.

 

그 다음 Dynamic Links > 시작하기를 눌러서 dynamic links를 만든다.

시작하기를 누르면 아래와 같이 URL 프리픽스를 추가하라고 하는데 도메인이 없는 경우 "https://your_subdomain.page.link"로 직접 작성하여 동적링크를 만들 수 있다.

동직 링크 URI 직접 만들기 : https://firebase.google.com/docs/dynamic-links/create-manually?hl=ko

 

동적 링크 URL 직접 만들기  |  Firebase

다음 형식으로 URL을 직접 작성하여 동적 링크를 만들 수 있습니다. https://your_subdomain.page.link/?link=your_deep_link&apn=package_name[&amv=minimum_version][&afl=fallback_link] 동적 링크 매개변수 딥 링크 매개변수(페이로드 매개변수) link 앱에서 열리는 링크입니다. 앱이 처리할 수 있는 URL(일반적으로 앱의 콘텐츠 또는 페이로드)을 지정할 수 있으며, 이를

firebase.google.com

앱 처럼 도메인이 없는 경우 무료로 제공해주는 page.link를 쓰면 된다.

다음과 같이 생성되면 새 동적 링크를 클릭한다.

단축 URL링크는 짧은 URL을 사용할 때 사용되는 URL이다.

제공되는 것을 사용해도 되고 사용자가 정의해도 된다.

딥 링크 URL을 정의한다.

앱 설치 여부에 관계없이 앱으로 연결되는 딥 링크이다.

 

적용할 안드로이드 앱을 선택한다.

다음과 같이 생성된다.

 

 

다음은 안드로이드 스튜디오이다.

Firebase에서 제공해주는 개발자 문서가 정말 잘 되어 있어서 그대로 따라하면 된다.

동적 링크를 만드는 방법은 다음과 같다.

https://firebase.google.com/docs/dynamic-links/android/create?authuser=0&hl=ko

 

Android에서 동적 링크 만들기  |  Firebase

Firebase Dynamic Links Builder API를 사용하여 짧거나 긴 동적 링크를 만들 수 있습니다. 이 API는 긴 동적 링크 또는 동적 링크 매개변수가 들어 있는 객체를 취하며 다음 예와 같은 URL을 반환합니다. https://example.com/link/WXYZ https://example.page.link/WXYZ Firebase 및 동적 링크 SDK 설정 Android 앱에서 동적 링크를 만들려면 우선 Firebase SDK를

firebase.google.com

 

딥 링크를 처하는 코드는 다음과 같다.

https://firebase.google.com/docs/dynamic-links/android/receive?authuser=0

 

Android에서 Firebase 동적 링크 수신  |  Firebase

생성한 Firebase 동적 링크를 수신하려면 앱에 동적 링크 SDK를 포함하고, 앱이 로드될 때 FirebaseDynamicLinks.getDynamicLink() 메서드를 호출하여 동적 링크로 전달된 데이터를 가져와야 합니다. Firebase 및 동적 링크 SDK 설정 아직 추가하지 않았다면 Android 프로젝트에 Firebase를 추가합니다. 앱을 등록할 때 SHA-1 서명 키를 지정합니다. 앱 링크를 사용하는 경우에도 SHA-256 키를 지정합니

firebase.google.com

 

다음은 실제로 적용한 코드이다.

[AndroidManifest.xml]

<intent-filter android:autoVerify="true">

                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />

                <category android:name="android.intent.category.BROWSABLE" />



                <data

                    android:host="example.com"

                    android:scheme="https" />



                <data

                    android:host="example.com"

                    android:scheme="http" />


 </intent-filter>​

 

 [DeepLink.java]

코드에서는 heetest가 아닌 다른 url을 사용하여 구현하였다. (실제사용)

public class DeepLink extends AppCompatActivity {
    private static final String TAG = "FORBABY";
    private static final String SEGMENT_CHECK = "check";     //deep link uri에 있는 segment
    private static final String KEY_CODE = "key";            //deep link uri에 있는 key(인증 key)

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_deep_link);
        handleDeepLink();
        findViewById(R.id.btn_share_dynamic_link).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                createDynamicLink();
            }
        });
    }

    private void createDynamicLink() {
        DynamicLink dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink()
                .setLink(getCheckDeepLink())    //정보를 담는 json 사이트를 넣자!!
                .setDynamicLinkDomain("7depromeet.page.link")
                .setAndroidParameters(new DynamicLink.AndroidParameters.Builder(getPackageName()).build())
                .buildDynamicLink();
        Uri dylinkuri = dynamicLink.getUri();   //긴 URI
        Log.d(TAG, "long uri : " + dylinkuri.toString());
        //짧은 URI사용
        FirebaseDynamicLinks.getInstance().createDynamicLink()
                .setLongLink(dylinkuri)
                .buildShortDynamicLink()

                .addOnCompleteListener(this, new OnCompleteListener<ShortDynamicLink>() {
                    @Override
                    public void onComplete(@NonNull Task<ShortDynamicLink> task) {
                        if (task.isSuccessful()) {
                            Uri shortLink = task.getResult().getShortLink();
                            Uri flowchartLink = task.getResult().getPreviewLink();
                            Log.d(TAG, "short uri : " + shortLink.toString());    //짧은 URI
                        } else {
                            Log.w(TAG, task.toString());
                        }
                    }
                });
    }


    private void handleDeepLink() {
        FirebaseDynamicLinks.getInstance()
                .getDynamicLink(getIntent())
                .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
                    @Override
                    public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
                        //app으로 실행 했을 경우 (deeplink 없는 경우)
                        if (pendingDynamicLinkData == null) {
                            Log.d(TAG, "No have dynamic link");
                            return;
                        }
                        //deeplink로 app 넘어 왔을 경우
                        Uri deepLink = pendingDynamicLinkData.getLink();
                        Log.d(TAG, "deepLink: " + deepLink);
                        String segment = deepLink.getLastPathSegment();

                        //uri에 있는 key값 가져오기
                        switch (segment) {
                            case SEGMENT_CHECK:
                                String code = deepLink.getQueryParameter(KEY_CODE);
                                showCheckDialog(code);      //임의로 dialog로 key값 띄움
                                break;
                        }

                    }
                })
                .addOnFailureListener(this, new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.w(TAG, "getDynamicLink:onFailure", e);
                    }
                });
    }

    //확인용 다이얼로그
    private void showCheckDialog(String code) {
        new AlertDialog.Builder(this)
                .setMessage("Receive check key: " + code)
                .setPositiveButton("Confirm", null)
                .create().show();
    }

    //deeplink uri만들기
    private Uri getCheckDeepLink() {
        // 인증 할 key값 생성 후 넣기
        String keyCode = "AA123456";
        return Uri.parse("https://example.com/" + SEGMENT_CHECK + "?" + KEY_CODE + "=" + keyCode); //example

    }
​

 

[결과]

위의 3줄은 바로 앱을 사용했을 시 나오는 log값들이다.

long uri, short uri는 다음과 같다. short uri는 위에서 정의한 uri로 나온다.

마지막 줄은 short uri값을 클릭 했을 경우 딥링크를 통해 앱을 실행하게 되고 딥 링크에 있는 check key값을 받는다.

바로 앱을 실행 했을 경우

 

uri를 통해 앱을 실행 할 경우

 

 

참고 영상 : https://www.youtube.com/watch?v=zra2DCd0DnY

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함