百度云推送ios没收到信息怎么破
2个回答
展开全部
app在前台运行. 接收到推送信息时屏幕上不会有任何显示,也不会有提示音,但你的app delegate会收到这个推送信息。你可以在这里加入代码来处理接收到的信息。
app不在前台运行。iPhone可能停留在主界面或者另一个app正在运行.一个提示窗口会弹出,可能伴随着提示音。用户可以点击Close按钮来关闭这个窗口或者点击View按钮来打开你的app。如果用户点击的时Close按钮,那你的app不会处理这个推送的信息。
iPhone在锁屏状态下. 同样一个提示窗口弹出,并伴随着提示音,但是这个窗口不会有Close和View按钮。屏幕解锁后会自动进入你的app。
因为app delegate是接收推送信息的地方,我们对app的最后改动都是在AppDelegate.m文件中。我们需要修改两处:
application:didFinishLaunchingWithOptions:函数. 如果推送信息到达时你的app不在前台运行,而用户在弹出窗口点击了“View”按钮,你的app会重新运行然后这个信息会作为参数注入到application:didFinishLaunchingWithOptions:函数中。
application:didReceiveRemoteNotification:函数. 如果信息到达时你的app正在前台运行,那这个函数就会被调用。在iOS4.0或更新的版本,如果你的app从暂停状态进入前台,这个函数也会被调用。你可以用UIApplication的applicationState属性来检查你的app是否是从暂停状态苏醒。
上述的两个函数都会有一个字典参数其中包含了JSON格式的推送信息内容。OS已经帮我们把JSON格式的信息转换成Objective-C字典了。将下面的代码加到didFinishLaunchingWithOptions:函数的return语句前: if (launchOptions != nil)
{
NSDictionary* dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (dictionary != nil)
{
NSLog(@"Launched from push notification: %@", dictionary);
[self addMessageFromRemoteNotification:dictionary updateUI:NO];
}
}
我们先确保launchOptions参数不是nil以及launchOptions中包含了推送信息。然后调用addMessageFromRemoteNotification函数来处理这个信息。
把下面的函数加到AppDelegate.m文件中: - (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
{
NSLog(@"Received notification: %@", userInfo);
[self addMessageFromRemoteNotification:userInfo updateUI:YES];
}
这个函数同样依靠addMessageFromRemoteNotification来完成处理信息的工作。
将下面这个函数复制粘贴到didFinishLaunchingWithOptions:函数上面:- (void)addMessageFromRemoteNotification:(NSDictionary*)userInfo updateUI:(BOOL)updateUI
{
Message* message = [[Message alloc] init];
message.date = [NSDate date];
NSString* alertValue = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"];
NSMutableArray* parts = [NSMutableArray arrayWithArray:[alertValue componentsSeparatedByString:@": "]];
message.senderName = [parts objectAtIndex:0];
[parts removeObjectAtIndex:0];
message.text = [parts componentsJoinedByString:@": "];
int index = [dataModel addMessage:message];
if (updateUI)
[self.chatViewController didSaveMessage:message atIndex:index];
[message release];
}
我保证这是最后一点代码了。然我们解释一下这段代码。Message* message = [[Message alloc] init];
message.date = [NSDate date];
首先我们创建一个Message对象。我们会把推送信息的内容提取出来,填入到这个对象中然后将这个对象加入到DataModel中。NSString* alertValue = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"];
上面的代码从推送信息中获取了信息的内容。推送信息的JSON的格式看起来是这样的:{
"aps":
{
"alert": "SENDER_NAME: MESSAGE_TEXT",
"sound": "default"
},
}
app不在前台运行。iPhone可能停留在主界面或者另一个app正在运行.一个提示窗口会弹出,可能伴随着提示音。用户可以点击Close按钮来关闭这个窗口或者点击View按钮来打开你的app。如果用户点击的时Close按钮,那你的app不会处理这个推送的信息。
iPhone在锁屏状态下. 同样一个提示窗口弹出,并伴随着提示音,但是这个窗口不会有Close和View按钮。屏幕解锁后会自动进入你的app。
因为app delegate是接收推送信息的地方,我们对app的最后改动都是在AppDelegate.m文件中。我们需要修改两处:
application:didFinishLaunchingWithOptions:函数. 如果推送信息到达时你的app不在前台运行,而用户在弹出窗口点击了“View”按钮,你的app会重新运行然后这个信息会作为参数注入到application:didFinishLaunchingWithOptions:函数中。
application:didReceiveRemoteNotification:函数. 如果信息到达时你的app正在前台运行,那这个函数就会被调用。在iOS4.0或更新的版本,如果你的app从暂停状态进入前台,这个函数也会被调用。你可以用UIApplication的applicationState属性来检查你的app是否是从暂停状态苏醒。
上述的两个函数都会有一个字典参数其中包含了JSON格式的推送信息内容。OS已经帮我们把JSON格式的信息转换成Objective-C字典了。将下面的代码加到didFinishLaunchingWithOptions:函数的return语句前: if (launchOptions != nil)
{
NSDictionary* dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (dictionary != nil)
{
NSLog(@"Launched from push notification: %@", dictionary);
[self addMessageFromRemoteNotification:dictionary updateUI:NO];
}
}
我们先确保launchOptions参数不是nil以及launchOptions中包含了推送信息。然后调用addMessageFromRemoteNotification函数来处理这个信息。
把下面的函数加到AppDelegate.m文件中: - (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
{
NSLog(@"Received notification: %@", userInfo);
[self addMessageFromRemoteNotification:userInfo updateUI:YES];
}
这个函数同样依靠addMessageFromRemoteNotification来完成处理信息的工作。
将下面这个函数复制粘贴到didFinishLaunchingWithOptions:函数上面:- (void)addMessageFromRemoteNotification:(NSDictionary*)userInfo updateUI:(BOOL)updateUI
{
Message* message = [[Message alloc] init];
message.date = [NSDate date];
NSString* alertValue = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"];
NSMutableArray* parts = [NSMutableArray arrayWithArray:[alertValue componentsSeparatedByString:@": "]];
message.senderName = [parts objectAtIndex:0];
[parts removeObjectAtIndex:0];
message.text = [parts componentsJoinedByString:@": "];
int index = [dataModel addMessage:message];
if (updateUI)
[self.chatViewController didSaveMessage:message atIndex:index];
[message release];
}
我保证这是最后一点代码了。然我们解释一下这段代码。Message* message = [[Message alloc] init];
message.date = [NSDate date];
首先我们创建一个Message对象。我们会把推送信息的内容提取出来,填入到这个对象中然后将这个对象加入到DataModel中。NSString* alertValue = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"];
上面的代码从推送信息中获取了信息的内容。推送信息的JSON的格式看起来是这样的:{
"aps":
{
"alert": "SENDER_NAME: MESSAGE_TEXT",
"sound": "default"
},
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1. 确认您的应用在苹果开发者网站上已经正确配置了APNs,并且下载安装了APNs证书;
2. 请使用设备来测试推送。模拟器是获取不到device token的,所以不能进行绑定,当然也不能进行推送测试。满足以上前提条件时,核对以下步骤:1. 确认修改注册接口中的API_KEY是正确的应用;2. 正确调用bindChannel,并成功返回appid、userid和channelid,而且appid请确认是正确的应用;
3. 在管理界面的推送设置里,成功上传.pem格式的APNs开发证书和生产证书(只测试开发版可以不需要生产证书,pem证书大小约为4K,并且fileencoding必须为utf8);
4. 注册接口(+ (void)registerChannel:(NSDictionary *)launchOptions apiKey:(NSString *)apikey pushMode:(BPushMode)mode withFirstAction:(NSString *)leftAction withSecondAction:(NSString *)rightAction withCategory:(NSString *)category isDebug:(BOOL)isdebug)中,如果是测试开发版请设置BPushMode为BPushModeDevelopment,生产版设置为BPushModePruduction;
5. 修改配置后,请卸载应用再安装;
6. iOS推送只支持通知,并且在推送通知时,请正确勾选推送的是开发模式还是生产模式;
7. 如果在您的应用中还推送不了,请先用sdk自带的demo进行调试,再次确认1~6步。
2. 请使用设备来测试推送。模拟器是获取不到device token的,所以不能进行绑定,当然也不能进行推送测试。满足以上前提条件时,核对以下步骤:1. 确认修改注册接口中的API_KEY是正确的应用;2. 正确调用bindChannel,并成功返回appid、userid和channelid,而且appid请确认是正确的应用;
3. 在管理界面的推送设置里,成功上传.pem格式的APNs开发证书和生产证书(只测试开发版可以不需要生产证书,pem证书大小约为4K,并且fileencoding必须为utf8);
4. 注册接口(+ (void)registerChannel:(NSDictionary *)launchOptions apiKey:(NSString *)apikey pushMode:(BPushMode)mode withFirstAction:(NSString *)leftAction withSecondAction:(NSString *)rightAction withCategory:(NSString *)category isDebug:(BOOL)isdebug)中,如果是测试开发版请设置BPushMode为BPushModeDevelopment,生产版设置为BPushModePruduction;
5. 修改配置后,请卸载应用再安装;
6. iOS推送只支持通知,并且在推送通知时,请正确勾选推送的是开发模式还是生产模式;
7. 如果在您的应用中还推送不了,请先用sdk自带的demo进行调试,再次确认1~6步。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询