最新版JpushSDK RN (android)的疑问

react-native
标签: #<Tag:0x00007fb83ff03300>

(AaronHero) #25

未启动状态跳转指定页面,传递消息内容和附加字段这个问题还是解决不了。


(KenChoi) #26

你在调用 jumpToPushActivity 之前不是走了 addReceiveOpenNotificationListener 方法吗?这里保存一下 extra


(AaronHero) #27

不走addReceiveOpenNotificationListener


(AaronHero) #28

你好,刚又回过头看这个问题,发现:

程序在前台和后台运行时,sendEvent中的打印mRAC都会打印Sending event:

07-13 06:55:09.887 3420-3420/? I/JPushModule: Sending event : receiveNotification
07-13 06:55:09.887 3420-3420/? D/JPushModule: +++++++com.facebook.react.bridge.ReactApplicationContext@329c0d27

07-13 06:55:16.775 3420-3420/? I/JPushModule: Sending event : openNotification
07-13 06:55:16.776 3420-3420/? D/JPushModule: +++++++com.facebook.react.bridge.ReactApplicationContext@329c0d27

程序在未启动时,收到通知不会调用sendEvent,打开通知时,才调用。不知道是不是这里影响了传递通知内容和附加字段?

只有openNotification,没有receiveNotification:

未启动仅打印
07-13 06:53:10.008 3420-3547/? I/JPushModule: Sending event : openNotification
07-13 06:53:10.008 3420-3547/? D/JPushModule: +++++++com.facebook.react.bridge.ReactApplicationContext@3966a487


(KenChoi) #29

openNotification 也会携带 extra 字段的。


(AaronHero) #30

现在的主要问题是:程序未启动下,打开通知没有执行openNotification方法,怎样改能让他执行呢?
(JPushModule.addReceiveOpenNotificationListener这个不执行)


#31


(AaronHero) #32

程序未运行状态下,能收到通知,打开通知能拉起应用跳转首页,但是,在调试程序时,addReceiveOpenNotificationListener方法不执行,更不用说跳转指定页面了。


(KenChoi) #33

调了 notifyJSDidLoad 也不走吗?


(AaronHero) #34

嗯,以前的版本会走,新版本不走了


(KenChoi) #35

以前的是指哪个版本?


(AaronHero) #36

以前的版本这样调用JPushModule.notifyJSDidLoad()


(KenChoi) #37

以前的是同步的,新版本是异步的。问题出在这里?


(AaronHero) #38

不清楚,你们运行的demo在未启动情况下打开通知,会走open方法吗?


(KenChoi) #39

走了,但是我设置了应用保护,不知道是不是跟这个有关


(KenChoi) #40

调用了 sendEvent,说明 mRAC 不为空,但是好像没有在 JS 端收到 openNotification 事件……


(AaronHero) #41

刚用红米note3运行了,手机权限,自启动都开了,神隐模式关闭,还是没有在 JS 端收到 openNotification 事件


(KenChoi) #42

我刚刚成功了,你这样写试试:

JPushModule.notifyJSDidLoad((resultCode) => {
			if (resultCode === 0) {
			}
		});
		JPushModule.addReceiveCustomMsgListener((map) => {
			this.setState({
				pushMsg: map.message
			});
			console.log("extras: " + map.extras);
		});
		JPushModule.addReceiveNotificationListener((map) => {
			console.log("alertContent: " + map.alertContent);
			console.log("extras: " + map.extras);
			// var extra = JSON.parse(map.extras);
			// console.log(extra.key + ": " + extra.value);
		});
		JPushModule.addReceiveOpenNotificationListener((map) => {
			console.log("Opening notification!");
			console.log("map.extra: " + map.extras);
			JPushModule.jumpToPushActivity("SecondActivity");
		});
		JPushModule.addGetRegistrationIdListener((registrationId) => {
			console.log("Device register succeed, registrationId " + registrationId);
		});

把注册 listener 事件写到 notifyJSDidLoad 外面。


(AaronHero) #43

成功了,跳转也成功了,值也传成功了。心里的大石头终于可以先放下了。谢谢指导!:grinning:


(KenChoi) #44

费心了,我一开始就是写到外面,估计回调出问题了