본문 바로가기
카카오 REST API & SDK/카카오톡 공유하기

카카오 링크/메시지 androidExecutioncParams, iosExecutionParams 사용

by kakao-TAM 2021. 9. 27.
Kakao.Link.sendDefault({
	objectType: 'feed',
	installTalk : true,
	content: {
		title: title,
		imageUrl: 'http://~~',
		link: {
			mobileWebUrl: 'http://~~',
			webUrl: 'http://~~',
			iosExecutionParams: 'url=http://~~',
			androidExecutioncParams: 'url=http://~~'
		},
	},
	buttons: [{
		title: '앱으로 보기',
		link: {
			mobileWebUrl: 'http://~~',
			webUrl: 'http://~~',
			iosExecutionParams: 'url=http://~~',
			androidExecutioncParams: 'url=http://~~'
		}
	}]
})

위와 같이 카카오 링크를 발송했을때, 등록된 android / iOS 앱이 있다면 모바일에서 '앱으로 보기' 선택 시, 파라메터와 함께 앱이 실행됩니다.

 

"androidExecutioncParams / iosExecutionParams는 Key=Value로 데이터를 전달합니다."

예를들어 하이브리드앱을 실행하고 파라메터로 URL을 받아 띄운다고 하면 아래와 같이 합니다.

 

android

onResume(), onCreate(…), onStart() 등등 앱이 로드될때 이벤트에서 파라메터를 받을 수 있습니다.

        if (intent != null) {
            val uri: Uri? = intent.data
            if (uri != null) {
                Log.d("url", uri.toString())
                uri.getQueryParameter("url")?.let {
                    Log.d("url get", it)
                    Toast.makeText(baseContext, it, Toast.LENGTH_SHORT).show()
                    webView.loadUrl(it)
                }

            }
        }

iOS

 iOS도 동일하게 앱에서 파라메터 받아서 웹뷰 띄워주는 처리 하셔야합니다.

 

SceneDelegate.swift

    func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
        
        if let url = URLContexts.first?.url.absoluteString {
            print("url = \(url)")
            let paramURL = getQueryStringParameter(url:url, param:"url")!
            print("paramURL = \(paramURL)")
            Var.myURL = URL(string:paramURL)!
            NotificationCenter.default.post(name: NSNotification.Name("TestNotification"), object: nil, userInfo: nil)
        }
        
    }
    func getQueryStringParameter(url: String, param: String) -> String? {
      guard let url = URLComponents(string: url) else { return nil }
      return url.queryItems?.first(where: { $0.name == param })?.value
    }

Var.swift

import Foundation
class Var{
    public static var myURL = URL(string:"https://기본주소.com")
}

ViewController.swift

//
//  ViewController.swift
//  webTest
//
//  Created by kakao on 2021/09/01.
//

import UIKit
import WebKit
@objcMembers class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate {

    // 웹뷰 목록 관리
    var webViews = [WKWebView]()
    var webView: WKWebView!
    override func viewDidLoad() {
        super.viewDidLoad()
        
        NotificationCenter.default.addObserver(self, selector: #selector(didRecieveTestNotification(_:)), name: NSNotification.Name("TestNotification"), object: nil)

        let screenSize: CGRect = UIScreen.main.bounds
        webView = createWebView(frame: screenSize, configuration: WKWebViewConfiguration())
        // Do any additional setup after loading the view.
        let myRequest = URLRequest(url: Var.myURL!)
        webView.load(myRequest)
    }
    @objc func didRecieveTestNotification(_ notification: Notification) {
            print("Test Notification")
        let myRequest = URLRequest(url: Var.myURL!)
        webView.load(myRequest)
    }

댓글