功能:服务端推送通知到用户手机端
OneSignal信息推送,包含推送信息,email,sms短信,这里只讲服务端推送的接口
客户端要先通过app在OneSignal注册,然后OneSignal管理后台就能看到用户的信息
https://github.com/OneSignal/onesignal-java-api/blob/main/docs/DefaultApi.md#createNotification
这个接口是OneSignal的api文档,createNotification则是推送消息的接口
依赖包:
<!-- Onesignal 消息推送依赖库 -->
<dependency>
<groupId>org.openapitools</groupId>
<artifactId>onesignal-java-client</artifactId>
<version>1.0.1</version>
</dependency>
<!-- HTTP客户端依赖库,也是Onesignal包的依赖 -->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>logging-interceptor</artifactId>
<version>4.9.3</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.3</version>
</dependency>
onesignal-java-client这个jar包maven库没有,导不下来,我是直接用源码压成jar包用的
找不到包的可以直接下面这个链接下载
import com.alibaba.fastjson.JSON;
import com.bizzan.bitrade.vo.MessageVO;
import com.onesignal.client.ApiClient;
import com.onesignal.client.ApiException;
import com.onesignal.client.Configuration;
import com.onesignal.client.auth.*;
import com.onesignal.client.model.*;
import com.onesignal.client.api.DefaultApi;
import okhttp3.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@Service
public class PushMessages {
public static void main(String[] args) throws IOException {
createNotification();
}
/**
* 创建通知 发布/通知
*/
public static void createNotification() throws IOException {
//appId
String appId = "";
//密钥
String appKeyToken = "";
//密钥和appId在onesignal的管理后台可以获得,需要先注册添加
ApiClient defaultClient = Configuration.getDefaultApiClient();
HttpBearerAuth appKey = (HttpBearerAuth)
defaultClient.getAuthentication("app_key");
appKey.setBearerToken(appKeyToken);
defaultClient.setBasePath("https://onesignal.com/api/v1");
DefaultApi apiInstance = new DefaultApi(defaultClient);
Notification notification = new Notification(); // Notification |
notification.setAppId(appId);
StringMap map = new StringMap();
map.setEn("");//发送英语
map.setZhHant("");//发送汉语-(这个hant好像是繁体还是简体,忘了)
notification.setContents(map);//发送内容
notification.setData(obj);//obj可以是自己定义的实体格式
notification.setContentAvailable(true);//是否要在手机通知栏通知,就是下拉看到的,true是不通知
List<String> list = new ArrayList<>();
// list.add("");
// notification.setIncludeExternalUserIds(list);//通过外部用户id推送(外部就是你们自己定义的,比如你们数据库的用户id)
// list.add("Subscribed Users");//Subscribed Users=订阅
// notification.setIncludedSegments(list);//群体发送(发送对象:订阅用户/活跃用户/所有用户)
list.add("aaaaa-bbbbb-ccccc-ddddd-eeeeeee");//多个值则添加多次,表示推送多个用户
notification.setIncludePlayerIds(list);//通过playerId推送(playerId是onesignal定义的,客户端在onesignal注册后会返会playerId)
// notification.setIsAndroid(true);//true会给所有安卓用户推送
// notification.setIsIos(true);//true给所有ios的用户推送
notification.setChannelForExternalUserIds("push");//push推送消息,值还有email/sms
try {
CreateNotificationSuccessResponse result = apiInstance.createNotification(notification);
System.out.println(result);
} catch (ApiException e) {
System.err.println("Exception when calling DefaultApi#createNotification");
System.err.println("Status code: " + e.getCode());
System.err.println("Reason: " + e.getResponseBody());
System.err.println("Response headers: " + e.getResponseHeaders());
e.printStackTrace();
}
}
}
推送成功返回消息:
class CreateNotificationSuccessResponse {
id: 5522d11-5d83-4cdf-b0d2-8dc9789445
recipients: 1
externalId: null
errors: null
}