在我的应用程序中,我想发送一个“预定的”推送通知。我使用quickblox作为推送通知服务。推送通知必须从应用程序本身创建,以便由quickblox在设置的日期/时间发送。消息的目的是发送一个内容可用标志,这样应用程序就可以在后台获取数据。
搜索文档,我认为这可以通过'ApplePushEvent‘来实现。然而,我找不到任何关于这方面的进一步信息。我尝试在sendButtonDidPress部分添加以下代码,以便向自己发送延迟5分钟的推送通知:
NSUInteger userID = ((QBUUser *)[_users objectAtIndex:[usersPickerView selectedRowInComponent:0]]).ID;
NSDate *date = [[NSDate alloc]init];
NSDate *fiveMinFromNow = [date dateByAddingTimeInterval:300];
QBMApplePushEvent *APEvent = [QBMApplePushEvent pushEvent];
APEvent.active = NO;
APEvent.name = @"test";
APEvent.type = QBMEventTypeOneShot;
APEvent.date = fiveMinFromNow;
APEvent.isDevelopmentEnvironment = YES;
APEvent.usersIDs = [NSString stringWithFormat:@"%d", userID];
NSString *message = @"Testing APNS!";
NSMutableDictionary *payload = [NSMutableDictionary dictionary];
NSMutableDictionary *aps = [NSMutableDictionary dictionary];
[aps setObject:@"default" forKey:QBMPushMessageSoundKey];
[aps setObject:message forKey:QBMPushMessageAlertKey];
[payload setObject:aps forKey:QBMPushMessageApsKey];
QBMPushMessage *Pushmessage = [[QBMPushMessage alloc] initWithPayload:payload];
APEvent.pushMessage = Pushmessage;
[QBMessages createEvent:APEvent delegate:self];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
[messageBody resignFirstResponder];然而,什么都没有发生,并且我在NSLog中收到了“UTF-8中的无效字节序列”错误。
以下是日志中的摘录:
2014-04-28 11:32:52.508 Messages[1763:4603] +[QBMEvent messageToString:] -> message: {
payload = "{\"aps\":{\"sound\":\"default\",\"alert\":\"TestingAPNS\"}}";
}
2014-04-28 11:32:52.510 Messages[1763:4603] Performing async request:
POST https://api.quickblox.com/events.xml
headers:{
"QB-SDK" = "iOS 1.8.4";
"Qb-Token" = 33360a8735e91da82e588ffdbd5cd462b52420cf;
"QuickBlox-REST-API-Version" = "0.1.1";
}
parameters:{
"event[date]" = 1398677872;
"event[environment]" = development;
"event[event_type]" = "one_shot";
"event[message]" = "payload=eyJhcHMiOnsic291bmQiOiJkZWZhdWx0IiwiYWxlcnQiOiJUZXN0aW5nQVBOUyJ9fQ==";
"event[name]" = test;
"event[notification_type]" = push;
"event[user][ids]" = 1026331;
}
2014-04-28 11:32:52.700 Messages[1763:1903] Request finished, response:
headers:{
"Access-Control-Allow-Origin" = "*";
"Cache-Control" = "no-cache";
Connection = "keep-alive";
"Content-Type" = "application/xml; charset=utf-8";
Date = "Mon, 28 Apr 2014 09:32:53 GMT";
"QB-Token-ExpirationDate" = "2014-04-28 11:32:43 UTC";
"QuickBlox-REST-API-Version" = "0.1.1";
Server = "nginx/1.0.15";
Status = "422 Unprocessable Entity";
"Transfer-Encoding" = Identity;
"X-Rack-Cache" = "invalidate, pass";
"X-Request-Id" = b65b8c46d1bd4c316e0758f047f1f1b1;
"X-Runtime" = "0.076002";
"X-UA-Compatible" = "IE=Edge,chrome=1";
}
body:
error:
<?xml version="1.0" encoding="UTF-8"?>
<errors type="array">
<error>
<code nil="true"/>
<message>invalid byte sequence in UTF-8</message>
</error>
</errors>非常感谢你的帮助!
致以亲切的问候,
劳伦斯
发布于 2014-05-07 17:03:10
您应该再添加一个参数并更改APEvent.type:
APEvent.pushType = QBMPushTypeAPNS;
APEvent.type = QBMEventTypeFixedDate;试试这个,希望能帮上忙
有关计划推送的更多信息,请在此处阅读http://quickblox.com/developers/Messages#Create_event
发布于 2015-05-15 06:29:52
我让content-available标志与Quickblox一起工作
我使用了Louwren (user3580713)问题中的以下代码:
NSString *message = @"Testing APNS!";
NSMutableDictionary *payload = [NSMutableDictionary dictionary];
NSMutableDictionary *aps = [NSMutableDictionary dictionary];
[aps setObject:@"default" forKey:QBMPushMessageSoundKey];
[aps setObject:message forKey:QBMPushMessageAlertKey];
[payload setObject:aps forKey:QBMPushMessageApsKey];
QBMPushMessage *Pushmessage = [[QBMPushMessage alloc] initWithPayload:payload];并在setObject之后添加了以下行:message
[aps setObject:@"1" forKey:@"content-available"];现在,当iPhone处于休眠状态时,会调用didReceiveRemoteNotification:fetchCompletionHandler。我正在寻找一种添加content-available标签的方法,这个问题帮我解决了这个问题。谢谢。希望这对某些人有帮助。
https://stackoverflow.com/questions/23337576
复制相似问题