iOS
Send Push Notifications
스위프트 및 클라우드 코드로 푸시 알림 구현하기
26 분
스위프트로 클라우드 코드를 사용하여 푸시 알림 보내기 소개 이 섹션에서는 back4app을 통해 클라우드 코드를 사용하여 푸시 알림을 보내는 방법을 설명합니다 이것이 어떻게 보일지입니다 언제든지 이 튜토리얼로 구축된 전체 프로젝트에 접근할 수 있습니다 github 리포지토리 이 빠른 시작을 완료하려면 다음이 필요합니다 xcode back4app에서 생성된 앱 다음의 새 parse 앱 튜토리얼 을 따라 back4app에서 parse 앱을 만드는 방법을 배우세요 back4app에 연결된 ios 앱 참고 다음의 parse sdk (swift) 설치 튜토리얼 을 따라 back4app에 연결된 xcode 프로젝트를 만드세요 다음의 back4app 대시보드를 통한 푸시 알림 튜토리얼 을 통해 설정된 ios 앱 ios 10 이상을 실행하는 ios 기기, 아이폰 또는 아이패드 유료 apple 개발자 계정 1 푸시 알림을 수신하도록 ios 앱 설정하기 푸시 알림을 위해 등록된 장치에 설치된 모든 parse 애플리케이션은 관련된 설치 설치 객체를 가지고 있습니다 설치 설치 객체는 푸시 알림을 타겟팅하는 데 필요한 모든 데이터를 저장하는 곳입니다 예를 들어, 앱에서 사용자가 관심 있는 팀을 저장하여 그들의 성과에 대한 업데이트를 보낼 수 있습니다 설치 설치 객체를 저장하는 것은 푸시 관련 앱 오픈 이벤트를 추적하는 데도 필요합니다 알림을 보내기 시작하는 가장 간단한 방법은 채널을 사용하는 것입니다 이를 통해 푸시 알림을 보내기 위한 게시자 구독자 모델을 사용할 수 있습니다 장치는 하나 이상의 채널에 구독함으로써 시작하며, 이후 이러한 구독자에게 알림을 보낼 수 있습니다 특정 설치 설치 에 구독된 채널은 채널 채널 필드에 저장됩니다 설치 설치 객체 그 후, 쿼리를 기반으로 단일 사용자 또는 사용자 그룹에 대한 타겟 푸시 알림을 보내는 방법을 살펴보겠습니다 앞으로 우리는 당신이 모든 단계를 완료했다고 가정할 것입니다 back4app 대시보드를 통한 푸시 알림 튜토리얼 , 이 튜토리얼로 제작된 ios 프로젝트를 사용하더라도 말입니다 github 저장소 기본적인 푸시 알림이 작동하고 관리 콘솔을 통해 푸시를 보낼 수 있어야 합니다 2 장치를 뉴스 채널에 구독하기 먼저 설치 객체에 채널을 추가할 것입니다 우리는 createinstallationonparse createinstallationonparse 메서드를 변경하여 이를 수행할 것입니다 프로젝트의 appdelegate m 파일 appdelegate m 파일 을 열고 createinstallationonparse createinstallationonparse 의 버전이 아래 코드와 동일한지 확인하십시오 appdelegate swift 1 func createinstallationonparse(devicetokendata\ data){ 2 if let installation = pfinstallation current(){ 3 installation setdevicetokenfrom(devicetokendata) 4 installation setobject(\["news"], forkey "channels") 5 installation saveinbackground { 6 (success bool, error error?) in 7 if (success) { 8 print("you have successfully saved your push installation to back4app!") 9 } else { 10 if let myerror = error{ 11 print("error saving parse installation \\(myerror localizeddescription)") 12 }else{ 13 print("uknown error") 14 } 15 } 16 } 17 } 18 } 우리는 새로운 코드 한 줄을 추가하고 있습니다 ‘installation setobject(\[“news”], forkey “channels”)’ 이는 설치 객체의 채널 배열을 ‘뉴스’라는 하나의 채널을 포함하도록 설정합니다 이것은 우리가 뉴스 뉴스 라는 채널에 구독한 모든 사람에게 메시지를 보낼 수 있게 해줍니다 2\ 실제 장치에서 앱을 실행하여 테스트하십시오 시뮬레이터에서 실행할 수 없습니다 설치 기록을 업데이트하려면 실제 푸시 토큰이 필요하므로 실제 장치가 필수입니다 3\ 성공적으로 실행된 후, 대시보드의 설치 설치 섹션에서 아래 이미지와 유사한 것을 볼 수 있어야 합니다 back4app 웹사이트 로 가서 설치 테이블을 확인할 수 있습니다 채널 열 아래에 뉴스 뉴스 , 당신이 이제 뉴스 뉴스 푸시 채널에 구독되었음을 보여줍니다 3 클라우드 코드를 생성하십시오 시작하는 방법에 대한 자세한 내용은 cloud code 를 참조하십시오 ios용 cloud code 튜토리얼 cloud code를 넣을 js js 파일을 만듭니다 back4app이 클라우드 코드를 저장하는 위치를 알 수 있도록 main js main js 라고 호출해야 합니다 푸시 알림을 호출하기 위해 parse cloud define parse cloud define , 클라우드 함수를 정의합니다 함수 내부에서 parse push send parse push send 를 호출하여 ‘ news news ’ 채널에 푸시를 보냅니다 이 작업에는 마스터 키 를 사용하는 것이 필요합니다 다음 코드는 이러한 단계를 실행합니다 parse server 3 x // main js 1 parse cloud define("pushsample", (request) => { 2 3 return parse push send({ 4 channels \["news"], 5 data { 6 title "hello from the cloud code", 7 alert "back4app rocks!", 8 } 9 }, { usemasterkey true }); 10 }); parse server 2 x //main js 1 parse cloud define("pushsample", function (request, response) { 2 parse push send({ 3 channels \["news"], 4 data { 5 title "hello from the cloud code", 6 alert "back4app rocks!", 7 } 8 }, { 9 success function () { 10 // push was successful 11 response success("push sent"); 12 console log("success push sent"); 13 }, 14 error function (error) { 15 // push was unsucessful 16 response error("error with push " + error); 17 console log("error " + error); 18 }, 19 usemasterkey true 20 }); 21 }) 4 클라우드 코드에 업로드 앱으로 가서 back4app 웹사이트 를 클릭합니다 대시보드 대시보드 클라우드 코드 클라우드 코드 를 찾아서 기능 및 웹 호스팅 기능 및 웹 호스팅 을 클릭합니다 이렇게 생겼습니다 3\ 새 파일을 업로드하거나 생성합니다(현재 main js main js 파일을 브라우저에서 직접 편집할 수도 있습니다) 그런 다음, 배포 배포 를 클릭합니다 여기와 같이 5 ios 앱에서 클라우드 코드를 호출하기 이제 앱에서 이 클라우드 함수를 호출하는 코드를 작성할 것입니다 이 작업을 완료하려면 시뮬레이터와 실제 장치가 모두 필요합니다 시뮬레이터에서 실행 중인 앱에서 클라우드 함수를 호출하면 실제 장치에서 푸시 알림이 나타나는 것을 볼 수 있습니다 실제 장치는 푸시 알림을 보기 위해 잠금 화면이 켜진 상태로 닫혀 있어야 합니다 푸시 알림을 받을 때 푸시를 보내는 앱 안에 있으면 화면에 푸시가 나타나지 않습니다 2\ 프로젝트의 viewcontroller swift viewcontroller swift 파일을 엽니다 파일 상단에 ‘import parse’를 추가하여 뷰 컨트롤러에 parse를 포함해야 합니다 viewcontroller swift 3\ 다음으로 viewcontroller swift viewcontroller swift 파일에서 viewdidappear 메서드로부터 알림 함수를 호출할 것입니다 이 알림은 클라우드 코드 코드를 트리거하여 귀하의 장치로 푸시를 보낼 수 있게 해줍니다 다음 코드 블록을 후 viewdidload viewdidload 함수 뒤에 포함시키는 것을 잊지 마세요 viewcontroller swift viewcontroller swift 1 override func viewdidappear( animated bool) { 2 asktosendpushnotifications() 3 } 4 5 func asktosendpushnotifications() { 6 let alertview = uialertcontroller(title "send a push to the news channel", message nil, preferredstyle alert) 7 let okaction = uialertaction(title "ok", style default) { (action\ uialertaction) in 8 self sendpushnotifications() 9 } 10 alertview\ addaction(okaction) 11 let cancelaction = uialertaction(title "cancel", style cancel) { (action\ uialertaction) in 12 } 13 alertview\ addaction(cancelaction) 14 if let presenter = alertview\ popoverpresentationcontroller { 15 presenter sourceview = self view 16 presenter sourcerect = self view\ bounds 17 } 18 self present(alertview, animated true, completion\ nil) 19 } 20 21 func sendpushnotifications() { 22 let cloudparams \[anyhashable\ string] = \[ ] 23 pfcloud callfunction(inbackground "pushsample", withparameters cloudparams, block { 24 (result any?, error error?) > void in 25 if error != nil { 26 if let descrip = error? localizeddescription{ 27 print(descrip) 28 } 29 }else{ 30 print(result as! string) 31 } 32 }) 33 } 4\ 시뮬레이터에서 앱을 실행하고 알림이 푸시 전송을 요청할 때 “확인”을 누르세요 실제 장치에서 잠금 화면에 푸시가 나타나는 것을 볼 수 있어야 합니다, 다음과 같이 6 rest api에서 cloud code 호출하기 rest api는 cloud 함수가 작동하는지 테스트하는 빠르고 쉬운 방법을 제공합니다 터미널이나 명령 프롬프트에서 아래 코드를 사용하세요 명령줄을 시작하는 방법에 대해 더 알고 싶다면 클릭하세요 linux , macos 또는 windows 푸시 알림을 테스트하려면, 장치가 닫혀 있을 때 rest 코드를 사용하세요 7 사용자 객체를 사용하여 타겟 푸시 알림 보내기 앞으로 우리는 기본 가입 및 로그인 기능이 이미 구축된 다른 ios 프로젝트를 사용할 것입니다 우리는 사용자가 로그인했는지 감지하는 방법을 보여줄 수 있는 이 ios 프로젝트를 사용할 것이며, 그렇다면 쿼리를 위해 클라우드 코드에 대한 객체 id 링크와 함께 설치를 저장할 것입니다 이 섹션의 튜토리얼로 구축된 전체 ios 프로젝트는 우리의 github 리포지토리 에서 다운로드할 수 있지만, 여전히 back4app 대시보드에서 푸시를 보내는 방법을 설명하는 이전 튜토리얼의 모든 설정을 해야 합니다 이 섹션의 튜토리얼로 구축된 전체 ios 프로젝트는 우리의 github 리포지토리 에서 다운로드할 수 있지만, 여전히 back4app 대시보드에서 푸시를 보내는 방법을 설명하는 이전 튜토리얼의 모든 설정을 해야 합니다 앱의 새 버전을 설정하고 가입하거나 로그인하세요 먼저 우리의 github 리포지토리 에서 작동하는 템플릿을 다운로드했는지 확인하세요 우리는 이 앱을 구축하는 모든 단계를 설명하지 않을 것이며, 대신 클라우드 코드를 설정하는 방법과 그 작동 원리에 집중할 것입니다 이 새 앱을 열면 반드시 appdelegate swift 파일에 자신의 앱 자격 증명을 입력하세요 appdelegate swift 1 func application( application uiapplication, didfinishlaunchingwithoptions launchoptions \[uiapplicationlaunchoptionskey any]?) > bool { 2 let configuration = parseclientconfiguration { 3 $0 applicationid = "paste your application id here" 4 $0 clientkey = "paste your client id here" 5 $0 server = "https //parseapi back4app com" 6 } 7 parse initialize(with configuration) 8 return true 9 } 2\ 이 앱은 이전 앱과 몇 가지 주요 차이점이 있습니다 로그인된 상태와 로그인되지 않은 상태를 위한 두 개의 섹션이 있습니다 다음 큰 변화는 appdelegate swift 파일의 함수 ‘createinstallationonparse’입니다 우리는 설치 객체의 일부로 사용자의 객체 id를 저장하는 1줄을 추가했습니다 이렇게 하면 어떤 사용자가 어떤 설치 객체와 연결되어 있는지 알 수 있으며, 개별적으로 푸시 알림을 보낼 수 있습니다 appdelegate swift 1 func createinstallationonparse(devicetokendata\ data){ 2 if let installation = pfinstallation current(){ 3 installation setdevicetokenfrom(devicetokendata) 4 installation setobject(\["news"], forkey "channels") 5 if let userid = pfuser current()? objectid { 6 installation setobject(userid, forkey "userid") 7 } 8 installation saveinbackground { 9 (success bool, error error?) in 10 if (success) { 11 print("you have successfully saved your push installation to back4app!") 12 } else { 13 if let myerror = error{ 14 print("error saving parse installation \\(myerror localizeddescription)") 15 }else{ 16 print("uknown error") 17 } 18 } 19 } 20 } 21 } 3\ 이제 우리는 설치 객체의 일부로 사용자의 객체 id를 저장하고 있으므로 사용자가 로그인할 때까지 새로운 푸시 토큰을 요청하고 싶지 않습니다 우리는 appdelegate swift 파일의 함수 ‘application didfinishlaunchingwithoptions’에서 직접 토큰을 요청하고 싶지 않으며, 대신 loggedinviewcontroller의 함수 ‘viewdidappear’에서 호출하고 싶습니다 ‘viewdidappear’에서 우리는 appdelegate의 함수에 호출하여 apple로부터 푸시 알림 토큰에 대한 접근을 요청합니다 이 섹션은 사용자가 로그인한 후에만 볼 수 있으므로 설치 객체를 생성할 때 사용자가 로그인했다고 가정할 수 있지만, 안전을 위해 parse currentuser() 객체를 언랩하고 객체 id를 검색하기 위해 ‘if let 문’을 사용했습니다 loggedinviewcontroller swift 1 override func viewdidappear( animated bool) { 2 appdelegate? startpushnotifications() 3 } appdelegate swift 1 if let userid = pfuser current()? objectid { 2 installation setobject(userid, forkey "userid") 3 } 4\ 좋아요, 이제 회원가입 또는 로그인하세요 실제 기기(iphone 또는 ipad)에서 앱을 시작하세요 아래 이미지를 볼 수 있어야 합니다 새 사용자를 만들려면 회원가입을 하거나, 이미 앱에서 사용자를 생성한 경우 로그인하세요 이렇게 보일 것입니다 이제 loggedinviewcontroller를 볼 수 있어야 합니다 이렇게 보일 것입니다 자신에게 푸시를 보내려고 하면 작동하지 않습니다 왜냐하면 우리는 아직 클라우드 코드에 이러한 메서드를 추가하지 않았기 때문입니다 그래서 다음에 할 일은 그것입니다 8 클라우드 코드에 대상 푸시 메서드 추가하기 이전에 생성한 main js main js 파일을 열고 사용자 id로 설치를 타겟팅하는 다음 함수를 추가하세요 이 작업에는 마스터 키 를 사용하는 것이 필요합니다 parse server 3 x // main js 1 parse cloud define('sendpushtoyourself', (request) => { 2 let userid = request user id; 3 4 let query = new parse query(parse installation); 5 query equalto("userid", userid); 6 query descending("updatedat"); 7 return parse push send({ 8 where query, 9 data { 10 title "hello from the cloud code", 11 alert "back4app rocks! single message!", 12 } 13 }, { usemasterkey true }); 14 }); 15 16 parse cloud define('sendpushtoallusers', (request) => { 17 let currentuser = request user; 18 let userids = \[currentuser id]; 19 20 let query = new parse query(parse installation); 21 query containedin('userid', userids); 22 return parse push send({ 23 where query, 24 data { 25 title "hello from the cloud code", 26 alert "back4app rocks! group message!", 27 } 28 }, { usemasterkey true }); 29 }); parse server 2 x //main js 1 parse cloud define('sendpushtoyourself', function (request, response) { 2 var currentuser = request user; 3 var userid = currentuser id; 4 5 var query = new parse query("installation"); 6 query equalto("userid", userid); 7 query descending("updatedat"); 8 parse push send({ 9 where query, 10 data { 11 title "hello from the cloud code", 12 alert "back4app rocks! single message!", 13 } 14 }, { 15 usemasterkey true, 16 success function () { 17 response success("success sending a single push!"); 18 }, 19 error function (error) { 20 response error(error code + " " + error description); 21 } 22 }); 23 }); 24 25 parse cloud define('sendpushtoallusers', function (request, response) { 26 var currentuser = request user; 27 var userids = \[currentuser id]; 28 29 var query = new parse query(parse installation); 30 query containedin('userid', userids); 31 parse push send({ 32 where query, 33 data { 34 title "hello from the cloud code", 35 alert "back4app rocks! group message!", 36 } 37 }, { 38 usemasterkey true, 39 success function () { 40 response success('success sending a group push!'); 41 }, 42 error function (message) { 43 response error(error code + " " + error description); 44 } 45 }); 46 }); 9 클라우드 코드에 업로드 앱으로 가서 back4app 웹사이트 를 클릭하세요 대시보드 대시보드 찾기 클라우드 코드 클라우드 코드 를 클릭하세요 함수 및 웹 호스팅 함수 및 웹 호스팅 이렇게 보입니다 3\ 파일을 업로드하거나 새 파일을 생성하세요 (현재 main js main js 파일을 브라우저에서 직접 편집할 수도 있습니다) 그런 다음, 배포 배포 를 클릭하세요, 여기와 같이 10 자신에게 타겟 푸시 알림을 보낼 수 있는지 테스트하기 물리적 장치는 잠금 화면이 켜진 상태로 두고 시뮬레이터에서 앱을 엽니다 ‘자신에게 푸시 보내기’ 버튼과 ‘그룹에 푸시 보내기’ 버튼을 눌러 두 푸시 기능이 모두 작동하는지 테스트할 수 있습니다 장치의 잠금 화면에 푸시가 나타나는 것을 볼 수 있어야 합니다 최종 생각 이제 사용자의 채널이나 사용자 객체 id 또는 사용자의 객체 id를 가져오는 쿼리와 관련된 다른 쿼리를 기반으로 푸시를 보내는 방법에 대한 확고한 이해가 있어야 합니다 사용자의 객체 id를 저장하려면 푸시 설치에 추가해야 하며, 사용자가 로그인할 때만 푸시 토큰을 요청해야 한다는 점을 기억하세요 쿼리를 통해 푸시를 보낼 때 기본적으로 100개의 결과로 제한되며 일부 사용자는 하나 이상의 설치 객체를 가질 수 있습니다 또한 100개 이상의 설치 객체 배열에 푸시를 보내는 것은 권장되지 않습니다 일부 푸시가 전송되지 않을 수 있습니다 대규모 그룹을 다룰 때는 채널을 사용하거나 반복 요청으로 푸시를 보내는 것이 좋습니다 완료되었습니다! 이 단계에서 back4app을 통해 클라우드 코드를 사용하여 푸시 알림을 보낼 수 있습니다! 축하합니다!