하이브리드앱을 개발시 푸시 메시지 기능을 적용할 수 있는데,

링크를 걸어서 사용자가 알림 메시지 선택시 지정한 링크로 이동하는 방법에 대한 설명이다.

 

AppDelegate.swift

  func userNotificationCenter(_ center: UNUserNotificationCenter,
                              didReceive response: UNNotificationResponse) async {
    let userInfo = response.notification.request.content.userInfo

    // [START_EXCLUDE]
    // Print message ID.
    if let messageID = userInfo[gcmMessageIDKey] {
      print("Message ID: \(messageID)")
    }
    // [END_EXCLUDE]

    // With swizzling disabled you must let Messaging know about the message, for Analytics
    // Messaging.messaging().appDidReceiveMessage(userInfo)

    // Print full message.
    print(userInfo)

      //let link = userInfo[myLink]
      if let myLinkOrg = userInfo[myLink]{
          link_org = myLinkOrg as! String
          print("link_org: \(link_org)")
      }else if let aps = userInfo["aps"] as? NSDictionary{
          if let link = aps["link"] as? NSString{
              link_org = link as String
              print("link_org !!: \(link_org)")
          }
      }
      print("url link: \(link_org)")
      if link_org != ""{
          if UIApplication.shared.applicationState == .active {
              NSLog("포그라운드에서 클릭")
              let vc = UIApplication.shared.windows.first!.rootViewController as! ViewController
              let myUrl = URL(string: link_org)
              let myRequest = URLRequest(url: myUrl!)
              vc.mainWebView.load(myRequest)
          }else{
              NSLog("백그라운드에서 클릭")
              let userDefault = UserDefaults.standard
              userDefault.set(link_org, forKey: "link")
              userDefault.synchronize()
          }

      }
      
  }

 

if UIApplication.shared.applicationState == .active {

위 소스를 이용하여 현재 앱이 액티브상태(포그라운드)인지 확인하고, 그럴 경우

let vc = UIApplication.shared.windows.first!.rootViewController as! ViewController
let myUrl = URL(string: link_org)
let myRequest = URLRequest(url: myUrl!)
vc.mainWebView.load(myRequest)

ViewController.swift 파일에 있는 mainWebView 변수를 호출하여 페이지를 로딩한다.

 

              let userDefault = UserDefaults.standard
              userDefault.set(link_org, forKey: "link")
              userDefault.synchronize()

위 소스를 이용하여 현재 앱이 액티브상태(백그라운드)가 아니면 UserDefaults를 이용하여 key - value 값을 전달한다.

여기서는 link 라는 key값을 설정했다.

 

ViewController.swift

import UIKit
import WebKit
import FirebaseMessaging

class ViewController: UIViewController {

    let url = URL(string: "https://m.naver.com")   // 운영 시작 URL
    var mainWebView = WKWebView(frame: CGRect(x: 0.0, y: 0.0, width: 0.1, height: 0.1)) // 메인 웹뷰 설정

    override func viewDidLoad() {
        super.viewDidLoad()
		...
        
        let request : URLRequest = URLRequest(url: url!)
        mainWebView.load(request)
        
        //백그라운드에서 포그라운드로 전환되면 실행되는 함수
        NotificationCenter.default.addObserver(forName: UIApplication.didBecomeActiveNotification, object: nil, queue: nil) { (Notification) in
                   
                let userDefault = UserDefaults.standard
                let pushUrl:String? = userDefault.string(forKey: "link")
                
                //링크가 있는 푸시를 클릭하는 경우에만 실행
                if(pushUrl != nil){
                    NSLog(pushUrl!)
                    NSLog("푸시에서 전달받은 웹뷰로")
                    let myUrl = URL(string: pushUrl!)
                    let myRequest = URLRequest(url: myUrl!)
                    self.mainWebView.load(myRequest)
                    userDefault.removeObject(forKey: "link")
                    userDefault.synchronize()
                }
        }
    }

 

 

 

<< 참고 링크 >>

iOS 푸시알림 APN 링크 받아서 링크주소로 웹페이지 연결:

https://developer111.tistory.com/50

 

[iOS] 푸시알림 APN 링크 받아서 링크주소로 웹뷰 이동하기

안녕하세요. iOS에서는 푸시알림을 애플의 자체 서비스인 Apple Push Notification Service를 통해 이루어집니다. 우리는 이전에 포스팅들을 통해 파이어베이스를 통해 파이어베이스 콘솔에서 푸시를 받

developer111.tistory.com

 

Java Spring FCM 푸시 전송시 link 설정 :

https://developer111.tistory.com/29

 

[파이어베이스] 안드로이드 웹뷰 푸시알림으로 특정 링크로 접속하도록 구현

웹뷰를 통해 구현한 하이브리드 앱이 있습니다. 웹서버는 스프링 프레임워크로 구현을 해주었고, 푸시알림을 보내고 이를 받은 클라이언트가 푸시알림을 누르면 특정 url로 이동할 수 있게끔 구

developer111.tistory.com

 

iOS FCM 푸시전송, postman 연결 (24년 6월까지 가능)

https://nsios.tistory.com/191

 

[Swift] FCM푸시 연결부터 Postman 테스트 푸시까지

FCM을 적용하면서 겪었던 경험을 공유하려고해요 FCM = Firebase Cloud Messaging 의 약자로 firebase에서 제공해주는 푸시알림기능이에요 먼저 FCM 설정하는 방법을 빠르게 알아보도록할게요 Firebase 설정하

nsios.tistory.com

 

Java Spring FCM 푸시 전송 :

https://kbwplace.tistory.com/179

 

[SpringBoot] FCM을 통해 Push 알림 보내기 (FCM push notification)

FCM은 Firebase Cloud Messaging의 약자로 기존 GCM에서 모든 플랫폼에 푸쉬를 쉽게 보낼 수 있도록 통합된 솔루션이다. Notification 콘솔의 GUI나 Admin SDK를 이용해 서버 등에서 FCM의 백에 요청을 보내면, FCM

kbwplace.tistory.com

 

+ Recent posts