gorush/README.md

158 lines
4.4 KiB
Markdown

# Gopush
A push notification server using [Gin](https://github.com/gin-gonic/gin) framework written in Go (Golang).
[![Build Status](https://travis-ci.org/appleboy/gofight.svg?branch=master)](https://travis-ci.org/appleboy/gofight) [![Coverage Status](https://coveralls.io/repos/github/appleboy/gopush/badge.svg?branch=master)](https://coveralls.io/github/appleboy/gopush?branch=master) [![Go Report Card](https://goreportcard.com/badge/github.com/appleboy/gopush)](https://goreportcard.com/report/github.com/appleboy/gopush) [![codebeat badge](https://codebeat.co/badges/ee01d852-b5e8-465a-ad93-631d738818ff)](https://codebeat.co/projects/github-com-appleboy-gopush)
## Feature
* Support [Google Cloud Message](https://developers.google.com/cloud-messaging/) using [go-gcm](https://github.com/google/go-gcm) library for Android.
* Support [HTTP/2](https://http2.github.io/) Apple Push Notification Service using [apns2](https://github.com/sideshow/apns2) library.
* Support [YAML](https://github.com/go-yaml/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](https://github.com/fvbock/endless).
See the [YAML config example](config/config.yml):
```yaml
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](https://github.com/appleboy/gopush/releases).
### Send Android notification
Send single notification with the following command.
```bash
$ gopush -android -m="your message" -k="API Key" -t="Device token"
```
* `-m`: Notification message.
* `-k`: [Google cloud message](https://developers.google.com/cloud-messaging/) api key
* `-t`: Device token.
### Send iOS notification
Send single notification with the following command.
```bash
$ 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.
```bash
$ gopush -ios -m="your message" -i="API Key" -t="Device token" -production
```
## Run gopush web server
Please make sure your [config.yml](config/config.yml) exist. Default port is `8088`.
```bash
$ gopush -c config.yml
```
Test status of api server using [httpie](https://github.com/jkbrzt/httpie) tool:
```bash
$ http -v --verify=no --json GET https://localhost:8088/api/status
```
![statue screenshot](screenshot/status.png)
## 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](https://hub.docker.com/r/appleboy/gopush/).
```bash
$ docker pull appleboy/gopush
$ docker run -name gopush -p 80:8088 appleboy/gopush
```
Testing your gopush server.
```bash
$ 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](https://github.com/fukata/golang-stats-api-handler).
* **POST** `/api/push` push ios and android notifications.
Simple send iOS notification example, the `platform` value is `1`:
```json
{
"notifications": [
{
"tokens": ["token_a", "token_b"],
"platform": 1,
"message": "Hello World iOS!"
}
]
}
```
Simple send Android notification example, the `platform` value is `2`:
```json
{
"notifications": [
{
"tokens": ["token_a", "token_b"],
"platform": 2,
"message": "Hello World Android!"
}
]
}
```
## License
Copyright 2016 Bo-Yi Wu [@appleboy](https://twitter.com/appleboy).
Licensed under the MIT License.