Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to resolve: language content complaining with OneSignal in Swift

I'm using OneSignal to manage my push notifications. For some notifications, I'm receiving:

Notifications must have English language content

But I'm only sending everything in the english language...

oneSignal.postNotification(["headings" : ["en": "\(who)"],
                            "subtitle" : ["en": "\(subtitle)"],
                            "contents" : ["en": "\(contents)"],
                            "include_player_ids": [result]],

Who, subtitle, contents are Strings, result is the receiver ID. Most of the notifications are sent, for some I receive the error message.

Console:

> ERROR: Create notification failed
Error Domain=OneSignalError Code=400 "(null)" UserInfo={returned={
    errors =     (
        "  Notifications must have English language content"
    );
}}

My complete function:

func sendPush(_ receiverID: String, _ who: String, _ didWhat: String, _ message: String?) {

    var subtitle = ""
    var contents = ""
    if message != nil {
        contents = message!
    }

    switch didWhat {
    case "likePost":
        subtitle = "liked your post"
    case "commentPost":
        subtitle = "commented on your post"
    case "likeComment":
        subtitle = "liked your comment"
    case "message":
        subtitle = "sent you a message"
    case "friendsRequest":
        subtitle = "sent you a friend request"
    case "friendAccept":
        subtitle = "accepted your friend request"
    case "follow":
        subtitle = "just followed you"
    default:
        break
    }

    getOneSignalPlayerID(receiverID, completion: { result in

        oneSignal.postNotification(["headings" : ["en": "\(who)"],
                                    "subtitle" : ["en": "\(subtitle)"],
                                    "contents" : ["en": "\(contents)"],
                                    "include_player_ids": [result]],
        onSuccess: { (success) in
            if success != nil {
                print(success!)
            }
        }, onFailure: { (failure) in
            if failure != nil {
                print(failure!)
                crashlyticsLog("getOneSignalPlayerID", failure!.localizedDescription)
            }
        })
    })
}

What am I missing? Help is very appreciated.

like image 819
David Seek Avatar asked Nov 24 '16 16:11

David Seek


2 Answers

I assume that one of the 4 fields is wrong. Wrong in this case can mean that it has sone illegal characters or characters in a non english coding. Print each field before posting the notification.

Another situation which raise this error may be caused because one of the fields is empty or nil. Again print them to a log before posting the notification.

like image 57
Vincent Avatar answered Oct 10 '22 19:10

Vincent


Your JSON structure is wrong. This is a example of a code that works:

let objNotif = ["contents": ["en" : message], "include_player_ids": [userID!]]
    //print(objNotif)

    OneSignal.postNotification(objNotif, onSuccess: { (jsonSuccess) in
      //Post OK
      }) { (error) in
      //Error
    }

OneSignal Documentation: https://documentation.onesignal.com/docs/ios-native-sdk

like image 31
Allan Scofield Avatar answered Oct 10 '22 20:10

Allan Scofield