본문 바로가기
IOS

Swift 푸시(FCM) 알림 클릭 시 원하는 웹뷰 페이지로 이동하기

by 일용직 코딩노동자 2021. 12. 8.
728x90
반응형

AppDelegate에서 

extension AppDelegate : UNUserNotificationCenterDelegate {
  func userNotificationCenter(_ center: UNUserNotificationCenter,didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {

  }
}

해당 함수를 사용이 가능 합니다.

해당 함수는 푸시를 클릭 했을 시 호출됩니다.

 

그리고 이제 웹서버에서 보내준 데이터를 받아야 하는데요.

let userInfo = response.notification.request.content.userInfo
var link = userInfo["gcm.notification.pushUrl"] ?? "1"
link = (link as AnyObject).removingPercentEncoding as Any
print("#1 : ",link)
Var.pushLink = link as! String

completionHandler()

이렇게 코드를 위 펑션안에 넣어주시면 되는데요.

 

단순히 userInfo 값을 print로 찍어보시면 키값이 어떤식으로 날라왔는지 알 수 있습니다.

해당 키값으로 값을 추출하여 만약 값이없다면 임의로 1을 넣어주었습니다.

ex) 

print(userInfo)

 

혹시 URL자체가 인코딩이 되서 날라 올 수 있으므로

removingPercentEncoding를 사용하여 다시 풀어줍니다.

 

그리고 값을 저장했는데요.

 

Var 클래스는 

import Foundation

class Var{
    var pushLink = ""
}

이런식으로 변수만 선언해서 다른 클래스에서도 사용 할 수 있도록 글로벌 변수로 사용하는 용도입니다.

 

그럼 이제 푸시를 클릭 하여 앱을 실행 했을 시 메인뷰컨으로 오실텐데

 

해당 뷰컨에서 이제 처리해주시면 됩니다.

 

저는 하이브리드를 기준으로 하였기에

 

extension ViewController: WKNavigationDelegate{
	func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    	//페이지 로딩이 끝나면 호출. (로그인까지 끝내고 정보를 가지고 원하는 URL로 이동)
        if Var.pushLink != "1" && Var.pushLink.count > 5 { //조건은 개발자에 따라 다르게 작성
        	//웹뷰이동
            Var.pushLink = "1"
        }
    }
}

해당 extension에서 처리했습니다.

 

만약 네이티브 앱 이라고 하시면 

 

viewDidLoad에서 바로 받아서 처리해보시면 될 것 같습니다.

물론 pushUrl값이 존재 하지않는다면 저는 1을 넣어주었기에 1일때와 아닐때를 구분해서 처리했습니다.

 

이동 후에는 꼭 변수를 초기값으로 셋팅해주시고 (잘못하면 계속 이동하는 참사가...)

 

이렇게 해주시면 끝입니다...!

728x90
반응형

댓글