iOS推送的消息处理跳转不当 求解答

ios
jpush
标签: #<Tag:0x00007fb83cf78d38> #<Tag:0x00007fb83cf78bf8>

(萌九) #1

问题量挺大的,之前做过的仅仅就是一个推送,然后点击之后在处理方法中加个通知 让其他界面来做操作的, 现在遇到一个自己搜索不到的问题 想问下大家是怎么处理的.
AppDelegate.m中
有两个方法

// 前台收到对象  通知处理
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
}

// 程序运行于后台 或杀死 点击推送通知 都会走这个方法
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
}

// 1.这里App是打开状态且收到通知直接先走这个 但是走这个的同时 状态栏也会弹出推送, 这个不明白. 不想让他弹出来

// 2.因为推送要做两种功能.
一是提示用户回答问题, 这个比较好处理 .
二是用户聊天 会用推送的形式发送 所以 App开启的时候 收到消息 想把弹出关了…

然后 还有 就是 self.window.rootViewController 根视图是UITabBarController. 四个子控制器ABCD是都有自定义导航的VC. 聊天界面是 A界面push到详情界面A1 点击A1中的按钮push到A2 的 A2为聊天界面.

// 跳到指定控制器A1
收到消息的时候 在后台 或杀死的方法里 我通过 发送通知 来 让A控制器接受通知 push到A1的…因为我在Appdelegate中 获取根视图的导航 发现是空的 自己搜不到好的答案…只能用通知解决了

还有情况就是 如果 App的打开状态的话…并且当前界面是A2的话 我想直接刷新当前页面… 但是 获取当前界面 我在Appdelegate中获取不到 通知也就发不了了 因为之前也有通知的 所以 这两个通知不能弄成一样的.

希望有人能帮帮忙?


#2

1、


去掉alert提醒

2、后面的问题没怎么看懂,你可以看一下 Background remote Notification和极光提供的自定义消息以及这个贴

额,看你的描述,似乎有用到即时通讯?是用了JMessage

如果第二点的几个链接都没有帮助的话,你可以继续问,最好,再次描述一下你的需求。


(萌九) #3

感谢回答…其实一开始我是想用JMessage的,但是考虑时间关系 一天之内接好,所以 还是用了JPUSH 来 用即时通讯了… 现在主要是想 在 我App运行的时候 也就是聊天页面 收到通知的时候, 在Appdelegate收到通知的方法中 怎么获取到当前打开的界面?


#4

应该是这个 [[[[UIApplication sharedApplication] keyWindow] subviews] lastObject];


(萌九) #5

[[[[UIApplication sharedApplication] keyWindow] subviews] lastObject] 打印的是UILayoutContainerView 这个类名, 估计不是我要的 , 我之前在Appdelegate接收通知方法中加了 if ([[self.window.rootViewController.navigationController.childViewControllers.lastObject class] isSubclassOfClass:[XXX class]]) // 判断当前页面是不是XXX 是的话就不跳转 直接刷新 不是就跳转…结果 没用 根TabBar 的导航没地址了… 不知道在Appdelegate中用什么方法能找到聊天页面了


#6

要不然 在收到消息的时候 发出一个 NSNotification ,在聊天页面监听 这个NSNotification。


APNS 在前台的时候 收到通知 走什么方法??
(萌九) #7

我现在准备上架了, 明天再整理一下再来问你吧 谢谢了


(萌九) #8

我是之前有了个通知 比如 A push B B push C 通知放在 A 中的 收到通知 push 到 B 页面, 我聊天界面是C 现在是想 如果用户就在 C 页面 收到了推送 怎么不让他走 A push B …如果在加个通知 还是要判断 当前页面是否是 C 聊天页面


(HuminiOS) #9

tabbar 先获得选择VC

self.tabController.selectedViewController

然后 获得

 topViewController

(萌九) #10

感谢回答.
提供的方法在项目里 没找到
昨天由于项目敢 没时间细细的查了 我最后尝试了[self.window.rootViewController.childViewControllers.firstObject.childViewControllers.lastObject class] 找到了 最后打开的界面
但是 现在有个问题 是想在聊天页面的时候 推送过来的 不显示Alert 不知道在哪设置


#11

二楼我不是回复过了alert的问题了么?
你这个通知,是远程通知吧?
1、


去掉alert提醒,把alert这里删掉


(萌九) #12

我之前看过,因为 这是App运行的时候 会走的…所以我去了alert的时候 不在指定页面也不显示了…
我试试用if判断 if (指定页面) { completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound); } else { completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert); }