앱이 사용자에게 알림을 주는 방법으로 푸시알림이 있어요
대표적으로 카카오톡 메시지가 오면 위에서 나오는 작은 알림창 같은 거에요
살짝 복잡할지도 모르지만
알아두면 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처럼 구별 할때쓰여요
이게 전부에요..!! 그러면 기기로 날라오는푸시를 받아볼수 있어요
아래에서 할거지만 다로 인증서를 등록할 필요가 없어요
지금부터는 외부에서 푸시날리는 방법을 구현해볼거에요
위의 홈페이지에 들어가서
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"
}
}
이런식으로 옵션을 달아서 넣어주면
짜잔 알람이 왔어요!!!!
백그라운드설정을 해놨기때문에
앱이 꺼져있어도 돌아가기때문에
알람이 와요!!
'iyOmSd > Title: Swift' 카테고리의 다른 글
[Swift] XML 파싱 (0) | 2020.04.03 |
---|---|
[Swift] Font Custom ( 원하는 글자만 폰트적용하기 ) (0) | 2020.03.01 |
[Swift] Socket.IO를 이용한 소켓통신 채팅앱 만들어보기 (3/3) (4) | 2019.12.17 |
[Swift] Socket.IO를 이용한 소켓통신 채팅앱 만들어보기 (2/3) (8) | 2019.12.17 |
[Swift] Socket.IO를 이용한 소켓통신 채팅앱 만들어보기 (1/3) (2) | 2019.12.13 |