java端设置IOS推送alert为json时,ios端推送显示不正确

标签: #<Tag:0x00007f657df74df8>

java通过极光推送提供的SDK ,设置向ISO推送的alert为json格式,ios端推送时将json整体当成String格式推送了

提供你推送的参数,和得到的展示效果,你期望什么效果

推送方法:

    public static PushPayload buildPushObject_ios(Map<String, String> extras,String registrationId,String alert,String title) {
	       // extras.put("test", "https://community.jiguang.cn/push");
    	String IOSAlert="";
    	//创建JSONObject对象
        JSONObject json = new JSONObject();
        //向json中添加数据
        json.put("title", alert);
        json.put("body", title);
	        return PushPayload.newBuilder()
	                .setPlatform(Platform.ios())
	                .setAudience(Audience.registrationId(registrationId))
	                .setNotification(Notification.newBuilder()
	                		.setAlert(json)
	                		.addPlatformNotification(IosNotification.newBuilder()
	                				.incrBadge(1)
	                				.addExtras(extras).build())
	                		.build())
	                .build();
	    }

效果:

1、参考 Java example

2、如果不支持,升级 Java SDK 版本

用这种方式传递alert也是有问题
IosAlert alert = IosAlert.newBuilder()
.setTitleAndBody(“test alert”, “subtitle”, “test ios alert json”)
.setActionLocKey(“PLAY”)
.build();

这是PushPayload对象的信息,麻烦看一下,是有什么问题吗,另外SDK版本是3.3.6的

{"platform":["ios"],"audience":{"registration_id":["1114a89792fc2636212"]},"notification":{"alert":"{\"title\":\"油炸\",\"body\":\"评论\"}","ios":{"alert":"{\"title\":\"油炸\",\"body\":\"评论\"}","extras":{"pushType":"comments","extraData":"8f4b2ca5-ee0a-45bc-8060-a77a2a9fa78c"},"badge":"+1","sound":""}},"options":{"sendno":824853149,"apns_production":false}}

alert对象:

        IosAlert iosalert = IosAlert.newBuilder()
                .setTitleAndBody("好大夫", title, alert)
                .setActionLocKey("PLAY")
                .build();

1、alert 后的括号前后不应该有引号

{"platform":["ios"],
"audience":{"registration_id":["1114a89792fc2636212"]},
"notification":{"alert":{"title":"油炸","body":"评论"},
"ios":{"alert":{"title":"油炸","body":"评论"},
"extras":{"pushType":"comments","extraData":"8f4b2ca5-ee0a-45bc-8060-a77a2a9fa78c"},
"badge":"+1",
"sound":""}},
"options":{"sendno":824853149,"apns_production":false}}

2、我使用上述 json 测试推送,收到展示效果正常。

那这是SDK的问题吗,alert的对象,我没做过处理

setAlert放在IosNotification里面构建试下:
image

.setNotification(Notification.newBuilder()
	                		.addPlatformNotification(IosNotification.newBuilder()
	                				.incrBadge(1)
	                				.setAlert(json)
	                				.addExtras(extras).build())
	                		.build())
1赞

可以了,谢谢

我用的上面的方法传递json数据时还是不行的,推送的数据在iPhone上面还是显示为json字符串
问题其实在于用的Json对象不对,应该对 setAlert 传参 JsonObject 对象数据,而不是 JSONObject 对象数据,注意大小写之分,JsonObject 是 Gson 中的 , JSONObject 是 FastJson 中的

也是有办法从JSONObject对象转换为JsonObject对象的
//创建JSONObject对象
JSONObject json = new JSONObject();
//向json中添加数据
json.put(“title”, alert);
json.put(“body”, title);
JsonParser jsonParser = new JsonParser();
JsonObject gsonObject = (JsonObject)jsonParser.parse(json.toString());