APNS/2는 새로운 HTTP/2 푸시 제공자 API를 사용하여 iOS, OSX 및 Safari에서 간단하고 유연하며 빠른 Apple 푸시 알림을 위해 설계된 GO 패키지입니다.
go get -u github.com/sideshow/apns2
테스트 스위트를 실행하는 경우 증언을 설치해야합니다.
go get -u github.com/stretchr/testify
package main
import (
"log"
"fmt"
"github.com/sideshow/apns2"
"github.com/sideshow/apns2/certificate"
)
func main () {
cert , err := certificate . FromP12File ( "../cert.p12" , "" )
if err != nil {
log . Fatal ( "Cert Error:" , err )
}
notification := & apns2. Notification {}
notification . DeviceToken = "11aa01229f15f0f0c52029d8cf8cd0aeaf2365fe4cebc4af26cd6d76b7919ef7"
notification . Topic = "com.sideshow.Apns2"
notification . Payload = [] byte ( `{"aps":{"alert":"Hello!"}}` ) // See Payload section below
// If you want to test push notifications for builds running directly from XCode (Development), use
// client := apns2.NewClient(cert).Development()
// For apps published to the app store or installed as an ad-hoc distribution use Production()
client := apns2 . NewClient ( cert ). Production ()
res , err := client . Push ( notification )
if err != nil {
log . Fatal ( "Error:" , err )
}
fmt . Printf ( "%v %v %v n " , res . StatusCode , res . ApnsID , res . Reason )
}
위와 같이 .p12
또는 .pem
인증서를 사용하는 대신 APNS JWT 제공자 인증 토큰을 선택적으로 사용할 수 있습니다. 먼저 Apple의 서명 키 ( .p8
파일), 키 ID 및 팀 ID가 필요합니다. 이러한 세부 정보가 있으면 새 클라이언트를 만들 수 있습니다.
authKey , err := token . AuthKeyFromFile ( "../AuthKey_XXX.p8" )
if err != nil {
log . Fatal ( "token error:" , err )
}
token := & token. Token {
AuthKey : authKey ,
// KeyID from developer account (Certificates, Identifiers & Profiles -> Keys)
KeyID : "ABC123DEFG" ,
// TeamID from developer account (View Account -> Membership)
TeamID : "DEF123GHIJ" ,
}
...
client := apns2 . NewTokenClient ( token )
res , err := client . Push ( notification )
최소한, 알림에는 devicetoken , 주제 및 페이로드가 필요합니다.
notification := & apns2. Notification {
DeviceToken : "11aa01229f15f0f0c52029d8cf8cd0aeaf2365fe4cebc4af26cd6d76b7919ef7" ,
Topic : "com.sideshow.Apns2" ,
Payload : [] byte ( `{"aps":{"alert":"Hello!"}}` ),
}
옵션 APNSID , 만료 또는 우선 순위를 설정할 수도 있습니다.
notification . ApnsID = "40636A2C-C093-493E-936A-2A4333C06DEA"
notification . Expiration = time . Now ()
notification . Priority = apns2 . PriorityLow
위와 같이 notification.Payload
위해 원시 바이트를 사용할 수 있거나 Payload Builder 패키지를 사용할 수있어 APNS 페이로드를 쉽게 구성 할 수 있습니다.
// {"aps":{"alert":"hello","badge":1},"key":"val"}
payload := payload . NewPayload (). Alert ( "hello" ). Badge ( 1 ). Custom ( "key" , "val" )
notification . Payload = payload
client . Push ( notification )
자세한 내용은 페이로드 문서를 참조하십시오.
APNS/2는 알림 이 전송되었는지 여부를 나타내는 Apple의 유효한 응답과 복귀 할 수 없거나 예기치 않은 오류 를 나타내는 유효한 응답을 구별합니다.
Error
반환됩니다. 즉, 기본 http.client 연결 또는 인증서 에 문제가있는 경우 페이로드가 전송되지 않았거나 유효한 응답이 접수되지 않았습니다.Response
반환됩니다. 이 구조물에는 푸시 알림이 성공 여부, APNS-ID 및 해당되는 경우 성공하지 못한 이유에 대한 자세한 정보가 포함되어 있습니다. Notification
성공적으로 전송되었는지 확인합니다.
res , err := client . Push ( notification )
if err != nil {
log . Println ( "There was an error" , err )
return
}
if res . Sent () {
log . Println ( "Sent:" , res . ApnsID )
} else {
fmt . Printf ( "Not Sent: %v %v %v n " , res . StatusCode , res . ApnsID , res . Reason )
}
요청 취소 및 타임 아웃 APNS/2에 대한 더 나은 제어를 위해 컨텍스트를 지원합니다. 상위 프로세스가 취소 될 때 모든 푸시를 취소하거나 개별 푸시 시간 초과에 대한 세밀한 곡물 제어가 필요한 경우 컨텍스트를 사용하면 도움이 될 수 있습니다. 컨텍스트에 대한 자세한 내용은 Google 게시물을 참조하십시오.
ctx , cancel = context . WithTimeout ( context . Background (), 10 * time . Second )
res , err := client . PushWithContext ( ctx , notification )
defer cancel ()
또한 APNS HTTP 2 푸시 속도의 위키 페이지를 참조하십시오.
최상의 성능을 얻으려면 apns2.Client
인스턴스를 유지하고 매번 푸시하지 않아야합니다. 기본 TLS 연결 자체는 연결 및 협상하는 데 몇 초가 걸릴 수 있으므로 apns2.Client
를 설정하고 매 푸시를 찢어 내면 성능에 큰 영향을 미칩니다. (Apple은 항상 연결을 열어 두는 것이 좋습니다).
apns2.Client
인스턴스의 양을 제한해야합니다. 기본 전송에는 HTTP 연결 풀 자체가 있으므로 단일 클라이언트 인스턴스가 대부분의 사용자에게 충분합니다 (한 인스턴스는 잠재적으로 초당 4,000 개 이상의 푸시를 수행 할 수 있습니다). 이보다 더 필요한 경우 CPU 코어 당 하나의 인스턴스가 좋은 출발점입니다.
속도는 서버의 위치와 네트워크 연결의 품질에 크게 영향을받습니다. 로컬, 프록시 뒤에 또는 서버가 미국 외부에있는 경우에만 테스트하는 경우 성능이 뛰어나지 않을 것입니다. AWS에 좋은 서버를 사용하면 괜찮은 처리량을 얻을 수 있어야합니다.
APNS/2에는 go get github.com/sideshow/apns2/apns2
와 함께 설치할 수있는 명령 줄 도구가 있습니다. 용법:
apns2 --help
usage: apns2 --certificate-path=CERTIFICATE-PATH --topic=TOPIC [<flags>]
Listens to STDIN to send notifications and writes APNS response code and reason to STDOUT.
The expected format is: <DeviceToken> <APNS Payload>
Example: aff0c63d9eaa63ad161bafee732d5bc2c31f66d552054718ff19ce314371e5d0 {"aps": {"alert": "hi"}}
Flags:
--help Show context-sensitive help (also try --help-long and --help-man).
-c, --certificate-path=CERTIFICATE-PATH
Path to certificate file.
-t, --topic=TOPIC The topic of the remote notification, which is typically the bundle ID for your app
-m, --mode="production" APNS server to send notifications to. `production` or `development`. Defaults to `production`
--version Show application version.
MIT 라이센스 (MIT)
저작권 (C) 2016 Adam Jones
이에 따라이 소프트웨어 및 관련 문서 파일 ( "소프트웨어")의 사본을 얻는 사람에게 허가는 제한없이 소프트웨어를 처리 할 수있는 사람에게 무료로 제공됩니다. , 소프트웨어의 사본을 게시, 배포, 서브 리센스 및/또는 판매하고, 소프트웨어가 제공하도록하는 사람을 다음과 같은 조건에 따라 할 수 있도록합니다.
위의 저작권 통지 및이 권한 통지는 소프트웨어의 모든 사본 또는 실질적인 부분에 포함되어야합니다.
이 소프트웨어는 상업성, 특정 목적에 대한 적합성 및 비 침해를 포함하여 명시 적 또는 묵시적 보증없이 "그대로"제공됩니다. 어떠한 경우에도 저자 또는 저작권 보유자는 계약, 불법 행위 또는 기타, 소프트웨어 또는 사용 또는 기타 거래와 관련하여 계약, 불법 행위 또는 기타의 행동에 관계없이 청구, 손해 또는 기타 책임에 대해 책임을지지 않아야합니다. 소프트웨어.