Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions api/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3685,9 +3685,12 @@ components:
errors: ""
properties:
id:
description: Notification identifier when the request created a notification.
An empty string means no notification was created; read `errors` for details
(HTTP may still be 200).
description: "Notification identifier when the request created a notification.\
\ An empty string means no notification was created; read `errors` for\
\ details (HTTP may still be 200). All OneSignal server SDKs expose message-sent\
\ / message-not-sent narrowing helpers (named idiomatically per language\
\ — e.g. `isMessageSent`, `is_message_sent`, `message_sent?`); prefer\
\ them over comparing `id` directly."
type: string
external_id:
description: Optional correlation / idempotency-related value from the API
Expand Down
2 changes: 1 addition & 1 deletion docs/CreateNotificationSuccessResponse.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

| Name | Type | Description | Notes |
|------------ | ------------- | ------------- | -------------|
|**id** | **String** | Notification identifier when the request created a notification. An empty string means no notification was created; read `errors` for details (HTTP may still be 200). | [optional] |
|**id** | **String** | Notification identifier when the request created a notification. An empty string means no notification was created; read `errors` for details (HTTP may still be 200). All OneSignal server SDKs expose message-sent / message-not-sent narrowing helpers (named idiomatically per language — e.g. `isMessageSent`, `is_message_sent`, `message_sent?`); prefer them over comparing `id` directly. | [optional] |
|**externalId** | **String** | Optional correlation / idempotency-related value from the API response. This is not the end-user External ID used for targeting recipients (that lives under `include_aliases.external_id`). | [optional] |
|**errors** | **Object** | Polymorphic field: may be an array of human-readable strings and/or an object (for example with `invalid_aliases`, `invalid_external_user_ids`, or `invalid_player_ids`) depending on the API response; HTTP may still be 200 with partial success. Typed SDKs model this loosely so both shapes deserialize. | [optional] |

Expand Down
28 changes: 28 additions & 0 deletions src/main/java/com/onesignal/client/NotificationHelpers.java
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,34 @@ public static CreateNotificationWithRetryResult createNotificationWithRetry(Defa
}
}

/**
* Whether a POST /notifications 200 response is the "message sent" branch.
*
* <p>POST /notifications returns 200 in two cases that share the
* {@link CreateNotificationSuccessResponse} shape: a notification was
* created (non-empty {@code id}), or none was (empty {@code id}, with
* {@code errors} carrying the reason). Prefer this guard over inspecting
* {@code id} directly.
*
* @param response a create-notification success response
* @return {@code true} when a notification was created
*/
public static boolean isMessageSent(CreateNotificationSuccessResponse response) {
return response != null && response.getId() != null && !response.getId().isEmpty();
}

/**
* Whether a POST /notifications 200 response is the "message not sent"
* branch -- no notification was created ({@code id} absent or empty);
* inspect {@code errors} for why.
*
* @param response a create-notification success response
* @return {@code true} when no notification was created
*/
public static boolean isMessageNotSent(CreateNotificationSuccessResponse response) {
return !isMessageSent(response);
}

private static String headerValue(Map<String, List<String>> headers, String name) {
if (headers == null) {
return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,11 +75,11 @@ public CreateNotificationSuccessResponse id(String id) {
}

/**
* Notification identifier when the request created a notification. An empty string means no notification was created; read &#x60;errors&#x60; for details (HTTP may still be 200).
* Notification identifier when the request created a notification. An empty string means no notification was created; read &#x60;errors&#x60; for details (HTTP may still be 200). All OneSignal server SDKs expose message-sent / message-not-sent narrowing helpers (named idiomatically per language — e.g. &#x60;isMessageSent&#x60;, &#x60;is_message_sent&#x60;, &#x60;message_sent?&#x60;); prefer them over comparing &#x60;id&#x60; directly.
* @return id
**/
@javax.annotation.Nullable
@ApiModelProperty(value = "Notification identifier when the request created a notification. An empty string means no notification was created; read `errors` for details (HTTP may still be 200).")
@ApiModelProperty(value = "Notification identifier when the request created a notification. An empty string means no notification was created; read `errors` for details (HTTP may still be 200). All OneSignal server SDKs expose message-sent / message-not-sent narrowing helpers (named idiomatically per language — e.g. `isMessageSent`, `is_message_sent`, `message_sent?`); prefer them over comparing `id` directly.")

public String getId() {
return id;
Expand Down