Go to file
Bo-Yi Wu 7c551da226 [ci skip] update readme.
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
2016-04-13 08:56:02 +08:00
certificate Add tls and normal server listen testing. 2016-04-02 00:37:58 +08:00
config #10 support docker build image for production. 2016-04-11 16:38:59 +08:00
docker add default config.yml 2016-04-11 20:27:12 +08:00
gorush fix #44 Support Zero downtime restarts for go servers 2016-04-12 15:04:25 +08:00
screenshot bump 1.0.0 and add status screenshot. 2016-04-11 15:13:13 +08:00
script [ci skip] remove windows support. 2016-04-12 15:37:53 +08:00
.editorconfig add editor config 2016-03-24 16:10:46 +08:00
.gitignore #10 support docker build image for production. 2016-04-11 16:38:59 +08:00
.travis.yml [ci skip] remove echo variable in travis. 2016-04-12 15:16:24 +08:00
LICENSE Initial commit 2016-03-22 15:15:20 +08:00
Makefile [ci skip] update readme. 2016-04-12 22:45:37 +08:00
README.md [ci skip] update readme. 2016-04-13 08:56:02 +08:00
gorush.go remove log message. 2016-04-11 14:54:37 +08:00

README.md

Gopush

A push notification server using Gin framework written in Go (Golang).

Build Status Coverage Status Go Report Card codebeat badge

Support Platform

Feature

  • Support Google Cloud Message using go-gcm library for Android.
  • Support HTTP/2 Apple Push Notification Service using apns2 library.
  • Support YAML configuration.
  • Support command line to send single Android or iOS notification.
  • Support Web API to send push notification.
  • Support zero downtime restarts for go servers using endless.
  • Support HTTP/2 or HTTP/1.1 protocol.

See the YAML config example:

core:
  port: "8088"
  max_notification: 100
  mode: "release"
  ssl: false
  cert_path: "cert.pem"
  key_path: "key.pem"

api:
  push_uri: "/api/push"
  stat_go_uri: "/api/status"

android:
  enabled: true
  apikey: "YOUR_API_KEY"

ios:
  enabled: false
  pem_cert_path: "cert.pem"
  pem_key_path: "key.pem"
  production: false

log:
  format: "string" # string or json
  access_log: "stdout" # stdout: output to console, or define log path like "log/access_log"
  access_level: "debug"
  error_log: "stderr" # stderr: output to console, or define log path like "log/error_log"
  error_level: "error"

Basic Usage

How to send push notification using gopush command? (Android or iOS)

Download a binary

The pre-compiled binaries can be downloaded from release page.

Send Android notification

Send single notification with the following command.

$ gopush -android -m="your message" -k="API Key" -t="Device token"

Send iOS notification

Send single notification with the following command.

$ gopush -ios -m="your message" -i="API Key" -t="Device token"
  • -m: Notification message.
  • -i: Apple Push Notification Certificate path (pem file).
  • -t: Device token.

The default endpoint is APNs development. Please add -production flag for APNs production push endpoint.

$ gopush -ios -m="your message" -i="API Key" -t="Device token" -production

Run gopush web server

Please make sure your config.yml exist. Default port is 8088.

$ gopush -c config.yml

Test status of api server using httpie tool:

$ http -v --verify=no --json GET https://localhost:8088/api/status

statue screenshot

Run gopush in Docker

Set up gopush in the cloud in under 5 minutes with zero knowledge of Golang or Linux shell using our gopush Docker image.

$ docker pull appleboy/gopush
$ docker run -name gopush -p 80:8088 appleboy/gopush

Testing your gopush server.

$ http -v --verify=no --json GET http://your.docker.host/api/status

Web API

Gopush support the following API.

  • GET /api/status Golang cpu, memory, gc, etc information. Thanks for golang-stats-api-handler.
  • POST /api/push push ios and android notifications.

POST /api/push

Simple send iOS notification example, the platform value is 1:

{
  "notifications": [
    {
      "tokens": ["token_a", "token_b"],
      "platform": 1,
      "message": "Hello World iOS!"
    }
  ]
}

Simple send Android notification example, the platform value is 2:

{
  "notifications": [
    {
      "tokens": ["token_a", "token_b"],
      "platform": 2,
      "message": "Hello World Android!"
    }
  ]
}

Send multiple notifications as below:

{
  "notifications": [
    {
      "tokens": ["token_a", "token_b"],
      "platform": 1,
      "message": "Hello World iOS!"
    },
    {
      "tokens": ["token_a", "token_b"],
      "platform": 2,
      "message": "Hello World Android!"
    },
    {
      "tokens": ["token_a", "token_b"],
      "platform": 2,
      "message": "Hello World!"
    },
    .....
  ]
}

Request body must has a notifications array. The following is a parameter table for each notification.

name type description required note
tokens string array device tokens o
platform int platform(iOS,Android) o 1=iOS, 2=Android
message string message for notification o
priority string Sets the priority of the message. -
content_available bool data messages wake the app by default. -
api_key string Android api key - only Android
to string The value must be a registration token, notification key, or topic. - only Android
collapse_key string a key for collapsing notifications - only Android
delay_while_idle bool a flag for device idling - only Android
time_to_live int expiration of message kept on GCM storage - only Android
restricted_package_name string the package name of the application - only Android
dry_run bool allows developers to test a request without actually sending a message - only Android
data string array data payload of a GCM message - only Android
notification string array payload of a GCM message - only Android
expiration int expiration for notification - only iOS
apns_id string A canonical UUID that identifies the notification - only iOS
topic string topic of the remote notification - only iOS
badge int badge count - only iOS
sound string sound type - only iOS
category string the UIMutableUserNotificationCategory object - only iOS
extend string array extensible partition - only iOS
alert string array payload of a iOS message - only iOS

See more detail APNs and GCM reference.

License

Copyright 2016 Bo-Yi Wu @appleboy.

Licensed under the MIT License.