如何解决:Swift中使用OneSignal时语言内容出现问题

8
我正在使用OneSignal来管理我的推送通知。对于某些通知,我收到以下信息:

通知必须有英语内容

但是我只有用英语发送所有内容...
oneSignal.postNotification(["headings" : ["en": "\(who)"],
                            "subtitle" : ["en": "\(subtitle)"],
                            "contents" : ["en": "\(contents)"],
                            "include_player_ids": [result]],

谁、副标题和内容是字符串,结果是接收方ID。大多数通知已发送,但有些我收到了错误消息。

控制台:

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

我的完整函数:

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)
            }
        })
    })
}

我缺少什么?非常感谢您的帮助。
2个回答

6

我猜测4个字段中有一个是错误的。在这种情况下,“错误”可能意味着它含有非法字符或非英语编码中的字符。在发布通知之前,请打印每个字段。

另一种引起此错误的情况可能是因为其中一个字段为空或为nil。再次在发布通知之前将它们打印到日志中。


1
看起来你是对的。我有一个带有可选值的函数,例如将空字符串作为字幕正文发送...更具体的错误消息会很有帮助...谢谢你的帮助。 - David Seek
3
我会这样做,并且我也会授予你奖金。赏金只剩下6天,也许有人有有用的提示或类似的东西。不用担心,我不会忘记你。 - David Seek

3

您的JSON结构有误。以下是一个可行代码示例:

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接