iyOmSd/Title: Swift

[Swift] APNS - Apple Push Notification

냄수 2020. 2. 28. 19:12
반응형

앱이 사용자에게 알림을 주는 방법으로 푸시알림이 있어요

대표적으로 카카오톡 메시지가 오면 위에서 나오는 작은 알림창 같은 거에요

 

살짝 복잡할지도 모르지만

알아두면 APN은 유용하게 쓰일거에요!!

 

우선은 간단한 로컬에서 푸시날리는 방법을 살펴볼께요!!!

 

    @IBAction func pushClick(_ sender: Any) {
        let push =  UNMutableNotificationContent()
        
        push.title = "test Title"
        push.subtitle = "test subTitle"
        push.body = "test body"
        push.badge = 1
        
        let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 3, repeats: false)
        let request = UNNotificationRequest(identifier: "test", content: push, trigger: trigger)
        UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
        
    }

정말 간단해요

trigger를 심어서

request를 만들고

추가해주면되요

 

UNTimeIntervalNotificationTrigger를 사용했는데 이 클래스는 원하는 시간뒤에 푸시를 보내줘요

위와같은경우는 3초뒤에 푸시알람이올거에요

 

request의 identifier은 나중에 request를 구별할 떄 id처럼 구별 할때쓰여요

 

이게 전부에요..!! 그러면 기기로 날라오는푸시를 받아볼수 있어요

 

아래에서 할거지만 다로 인증서를 등록할 필요가 없어요

 

 

지금부터는 외부에서  푸시날리는 방법을 구현해볼거에요

 

 

https://developer.apple.com

 

Apple Developer

Submit your apps today. Build your apps using Xcode 11, test them on devices running the latest OS, and submit them to the App Store. Learn more

developer.apple.com

 

위의 홈페이지에 들어가서 

Account 메뉴로 가세요

 

 

이 화면에서 Certificates, ....이 메뉴를 눌러 주세요!!

 

인증서가 없다면

+ 버튼을 눌러서

인증서를 만들어주세요

 

이제 푸시알람 서비스를 사용 할 수 있도록

인증서를 등록해볼게요

 

Identifiers + 버튼을누르고

들어가면

빈칸이 나와요

 

Xcode프로젝트를 열고

Bundle identifier을 가져와서

알맞은 칸에 넣어 줍니다.

Description에는 표시될 이름이에요

 

 

그 다음

 

 

메뉴 중에서 저희가 필요한건

Push Notification이니까 체크✅

 

이렇게하면 푸시인증서가 등록된거에요!!

 

 

push alarm test로 만들어져있네요

클릭해서 들어가서

 

푸시 알림에 설정을 해줘야해요 이제

 

Configure에 들어가면 인증서를 만들라는 듯한 문구가 보여요

 

 

인증서를 생성해 볼게요!!

 

위를 따라한다면 파일하나가 생성될거에요

그파일을

 

개발용과 배포용 타입

development 타입 혹은 production 타입에 맞게 

방금 다운받은 인증서를 적용 시켜주세요

 

새로 만든 인증서를 넣고

다음을 누르면

 

성공적이라면

Download가 뜰거에요

다운 받아주세요!!

 

 

 

이 인증서를 프로젝트에 적용시켜서 사용할거에요

 

엑스코드를 열고

 

+Capability를 눌러주면

 

메뉴가 쭈우우욱... 나오고

저희는 Push Notification을 선택해야해요!!

 

그리고 백그라운드에서도 푸시를 받아야하잖아요??

 

Background Mode도 선택하고

remote notification에 체크할게요!!

 

 

이제 코드를 작성해야겠죠⁉️⁉️

 

AppDelegate에서

APNS의 이벤트를 처리할 delegate를 설정해주고

푸시알람 옵션을 설정해줄거에요

 

아래코드를 입력하고 빌드를 하면 폰에 알람허용창이 뜰거에요

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // APNS 설정
    UNUserNotificationCenter.current().delegate = self

	UNUserNotificationCenter.current()
    	.requestAuthorization(options: [.alert, .sound, .badge]) {
        	[weak self] granted, error in
        
	        print("Permission granted: \(granted)")
	}

	// APNS 등록
	application.registerForRemoteNotifications()
	return true
}

 

application.registerForRemoteNotifications() 를 호출하면

APNS 등록을 시도하구요

 

APNS 등록에 성공하면 성공함수가 호출되서

deviceToken을 받아올거고

실패한다면 실패함수가 호출되요

// 실패시
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
    print("Failed to register for notifications: \(error.localizedDescription)")
}
    
// 성공시
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
      let tokenParts = deviceToken.map { data in String(format: "%02.2hhx", data) }
      let token = tokenParts.joined()
      print("Device Token: \(token)")
}
    

 

빌드했는데

이 과정에서 DeviceToken이 안나오는경우가 있어요!!

우선 시뮬레이터로 하면 안나오고 이상한 에러가  날거에요!!!

지원이 안되서...그런가바요..

 

그리고 등록하는데 시간이 걸릴수도있어요

앱 빌드하고 조금 기다려보세요!!

fail메시지가 안뜬다면 기다리다보면 등록되어서

DeviceToken이 나올겁니다.!!!

 

 

저는 여기서왜 등록이안되지.. 함수가 왜 호출이 안되지...

삽질좀 했습니다.. ㅎㅎㅎ

 

 

이제 푸시메시지 날릴 준비는 다 된거같아요

 

 

‼️‼️테스트를 어떻게 하나요???‼️‼️

제가 글을 시점기준으로는 APNS를 테스트하기가 마땅치않아요

곧 Xcode 11.4에서 파일을 끌어서놓으면

푸시되는 기능이 있다고하던데 지금은 없어요...ㅠ

 

그래서 

https://github.com/onmyway133/PushNotifications

 

여기에 들어가서

푸시테스트를 할수 있는 툴을 받으세요

 

다운 받고나면 실행해서

 

 

 

위에서부터 설명할께요!!

 SELECT P12

푸시인증서 만든거있죠?? 그거를 더블클릭해서 키체인에 등록시키고

오른쪽버튼 -> 내보내기를 누르고

.p12형식으로 저장하면 비밀번호입력을 받을거에요

 

방금내보내기한 파일을 넣어주고

그아래에는 입력한 비밀번호를 넣어주세요

 

그 아래에는 Bundle id 를 넣어주고

아래에는 DeviceToken받은것을 넣어주세요

 

밑에 타입 잘보시구 Developer이면 sandbox를 선택해주세요!!

 

그리고 이제 푸시메시지에 들어갈 내용을 지정할거에요

 

{
  "aps": {
    "alert": "알람이 오네요",
    "badge": 1,
    "sound": "default"
  }
}

 

이런식으로 옵션을 달아서 넣어주면

 

 

짜잔 알람이 왔어요!!!!

 

백그라운드설정을 해놨기때문에

앱이 꺼져있어도 돌아가기때문에 

알람이 와요!!

 

 

반응형