本人亲测有效!更多交流可以家魏鑫:lixiaowu1129,公重好:iOS过审汇总,一起探讨iOS技术!
假如你已经集成完了极光,恰好有这个问题不知如何解决,可以看看这篇文章,这篇是针对远程通知的,本地通知大同小异吧。
根据我项目的要求,极光推送跳转指定页面分为两种情况:app在后台情况和app在杀死的情况下。app在前台跳转页面暂时没做过。
这种情况app是由推送消息唤醒的,app启动就必须触发这个方法:
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions ;
判断app是否是由推送消息唤醒的,看下面:
把这个写在上面的方法中即可。但是有时候可能会出问题。下面有方法解决。
if (launchOptions) { //是否有推送消息
NSDictionary *remoteNotification = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey]; //这是判断app是否是由远程通知启动的 若是由本地通知启动的 则把 UIApplicationLaunchOptionsRemoteNotificationKey 换成 UIApplicationLaunchOptionsLocalNotificationKey
if (remoteNotification) { //是否有远程推送消息
[self jumpToViewctroller:remoteNotification]; //这是跳转页面的方法。
}
}
//跳转方法
-(void)jumpToViewctroller:(NSDictionary *)remoteNotification{
//remoteNotification是消息的json格式,跳转指定控制器首先你需要跟后台商量一下,添加一个字段。我这里添加的是jump,如果是1跳转这个,是2的话跳转那个等等。
if ([[NSString stringWithFormat:@"%@",remoteNotification[@"jump"]] isEqualToString:@"1"]) {
//这里注意一下。大多数页面都是UINavigationController的子控制器。当然了,在这里你是不能push进去的。必须present进去。此时你可能会问,那存储一个key值present是干什么用的。哈哈,这是告诉你要跳转的控制器,我是被present进来的。所以我返回的时候你也要把我diss回去。同时你也要清除它。
/*
控制器的返回方法。
if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"present"] isEqualToString:@"1"]) {
[self dismissViewControllerAnimated:YES completion:^{
[[NSUserDefaults standardUserDefaults] setObject:@"" forKey:@"present"]; // 这里最好完全清除它。
}];
}else{
[self.navigationController popViewControllerAnimated:YES];
}
*/
DelivedViewController *VC = [DelivedViewController new];
[[NSUserDefaults standardUserDefaults] setObject:@"1" forKey:@"present"] ;
[[NSUserDefaults standardUserDefaults] synchronize];
UINavigationController *na = [[UINavigationController alloc] initWithRootViewController:VC];
[self.window.rootViewController presentViewController:na animated:YES completion:nil];
}
}
以上就是app未运行的情况下跳转页面的。 注意: 前面说了判断是否有推送消息可能有问题。我遇到的问题就是 程序奔溃。可以让它延迟执行,方法如下:
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 忽略 。。。。。。
[self performSelector:@selector(sendNotation:) withObject:launchOptions afterDelay:1.5];
return YES;
}
-(void)sendNotation:(NSDictionary *)launchOptions{
if (launchOptions) {
NSDictionary *remoteNotification = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];
if (remoteNotification) {
[self jumpToViewctroller:remoteNotification];
}
}
}
这样就ok了。
这种情况就非常简单了。 上代码!
// iOS 10 Support 程序在后台时收到通知,点击通知栏进入app
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
// Required
NSDictionary * userInfo = response.notification.request.content.userInfo;
if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
//UNPushNotificationTrigger 远程(通知类型)
[JPUSHService handleRemoteNotification:userInfo];//userInfo消息数据,包含jump。
if ([UIApplication sharedApplication].applicationState == UIApplicationStateInactive ) {
[self jumpToViewctroller:userInfo];
[UIApplication sharedApplication].applicationIconBadgeNumber = 0; //本地消息清0
[JPUSHService setBadge:0];//极光消息清0
}
}
completionHandler(); // 系统要求执行这个方法
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
// Required, iOS 7 Support
[JPUSHService handleRemoteNotification:userInfo];
if ([UIApplication sharedApplication].applicationState == UIApplicationStateInactive ) {
[self jumpToViewctroller:userInfo];
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
[JPUSHService setBadge:0];
}
completionHandler(UIBackgroundFetchResultNewData);
}
本文由mdnice多平台发布
我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
我的工作要求我为某些测试自动生成电子邮件。我一直在四处寻找,但未能找到可以快速实现的合理解决方案。它需要在outlook而不是其他邮件服务器中,因为我们有一些奇怪的身份验证规则,我们需要保存草稿而不是仅仅发送邮件的选项。显然win32ole可以做到这一点,但我找不到任何相当简单的例子。 最佳答案 假设存储了Outlook凭据并且您设置为自动登录到Outlook,WIN32OLE可以很好地完成此操作:require'win32ole'outlook=WIN32OLE.new('Outlook.Application')message=
我正在使用Ruby,我正在与一个网络端点通信,该端点在发送消息本身之前需要格式化“header”。header中的第一个字段必须是消息长度,它被定义为网络字节顺序中的2二进制字节消息长度。比如我的消息长度是1024。如何将1024表示为二进制双字节? 最佳答案 Ruby(以及Perl和Python等)中字节整理的标准工具是pack和unpack。ruby的packisinArray.您的长度应该是两个字节长,并且按网络字节顺序排列,这听起来像是n格式说明符的工作:n|Integer|16-bitunsigned,network(bi
前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立
如果我在模型中设置验证消息validates:name,:presence=>{:message=>'Thenamecantbeblank.'}我如何让该消息显示在闪光警报中,这是我迄今为止尝试过的方法defcreate@message=Message.new(params[:message])if@message.valid?ContactMailer.send_mail(@message).deliverredirect_to(root_path,:notice=>"Thanksforyourmessage,Iwillbeintouchsoon")elseflash[:error]
我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption
RSpec似乎按顺序匹配方法接收的消息。我不确定如何使以下代码工作:allow(a).toreceive(:f)expect(a).toreceive(:f).with(2)a.f(1)a.f(2)a.f(3)我问的原因是a.f的一些调用是由我的代码的上层控制的,所以我不能对这些方法调用添加期望。 最佳答案 RSpecspy是测试这种情况的一种方式。要监视一个方法,用allowstub,除了方法名称之外没有任何约束,调用该方法,然后expect确切的方法调用。例如:allow(a).toreceive(:f)a.f(2)a.f(1)