apns に go から接続する
apns には前書いた APNs Provider API と昔からある Binary Provider API というのがある。
どちらも tls で接続する必要がある。 前者の場合は net/http
の Transport
の TLSClientConfig
に tls.Config
を指定する。
後者の場合は crypto/tls
の Dial 関数に tls.Config
を渡す。
developer center から証明書をダウンロードしてキーチェーンから .p12 で書き出してそれをそのまま使う場合は golang.org/x/crypto/pkcs12
を使って
cert := tls.Certificate{} b, err := ioutil.ReadFile(*p12File) if err != nil { return cert, err } key, cer, err := pkcs12.Decode(b, *p12Password) if err != nil { return cert, err } cert.PrivateKey = key cert.Certificate = [][]byte{cer.Raw}
こんな感じ tls.Certificate を作る。
openssl とかで証明書と秘密鍵を取り出してる場合は
return tls.LoadX509KeyPair(*cerFile, *keyFile)
こんな感じで書く。