iOS10,deviceToken变化的问题


(zongzi) #1

iOS,在开发环境下,每次刷包调试的时候,deviceToken有时候会变,这样同一个手机同一个APP会上报多个deviceToken,有什么解决办法吗?


#2

没有,这个是Apple规定的

你可以加上idfa,测试的时候,但上架时要谨慎使用idfa


(zongzi) #3

要不你帮我查一下,registrationID:101d855909779d4307f
老是出问题,有时候收不到推送通知,有时候报这个:2017-04-27 14:37:48.804483 WeRentCar[826:262573] | JIGUANG | E - [JIGUANGSessionController] 连接服务器失败
2017-04-27 14:37:48.822440 WeRentCar[826:262619] | JIGUANG | I - [JIGUANGSessionController] connecting with coreAddr 47.90.84.229,port 7003
2017-04-27 14:37:51.089269 WeRentCar[826:262552] | JIGUANG | I - [JIGUANGSessionController] connecting with coreAddr 121.46.20.39,port 7004
2017-04-27 14:37:56.095859 WeRentCar[826:262573] | JIGUANG | E - [JIGUANGTcpSocket] connect failed with socket timeout
2017-04-27 14:37:56.097617 WeRentCar[826:262573] | JIGUANG | E - [JIGUANGTcpSocket] connect socket failed:socket timeout


#4

报上面的错,是网络问题。

收不到,提供你消息的msgid额,推送历史-详情


(zongzi) #5

5237451468
我加了别名,一直用同一个手机调试,别名应该对应一个目标吧,但是有2个。


#6

token变化,registrationID就变化了,你没置空过别名,那么他的目标就会随着ID的变化(增加)而增加

你重新获取一下你的registrationID吧,设置别名的时候注意callback为0才是成功


(zongzi) #7

那registrationID增多,目标就会增多,这样推送的时候会不会有问题啊?即使目标增加了,为什么我收不到通知呢?上午我和后台调试的时候还没事,中午我重新刷包就出问题了,很疑惑


#8

旧registrationID是无效的。只是数据上依旧存在

当前,请你重新获取一下registrationID,并检查别名的设置,重设一次,再推送看下


(zongzi) #9

我卸载APP重新刷包,这次可以了,不应该啊,我没怎么改代码啊,这样会不会不稳定,有时候会收不到推送消息啊


(zongzi) #10

这次目标变成3个了,但是只有一个是有效的,我能不能删除无效的ID啊?


#11

iOS是代理的apns通知,所以很多情况是Apple那边决定的,如果你说卸载重装搞定,那么之前的问题就是Apple判断你App的token失效,所以Apple没有推送给你设备。

apple认为token失效了
2、苹果建议程序每次启动的时候从 apns 获取 devicetoken
重新获取一次新的token,测试时,简单的操作就是卸载重装


(zongzi) #12
       - (void)application:(UIApplication *)application didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo fetchCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler {
    NSLog(@"userInfo = = %@ (ios7-)",userInfo);
    if (application.applicationState == UIApplicationStateActive) {
        // 应用程序在前台给一个提示特别消息
        NSLog(@"UIApplicationStateActive === ");
        [JPUSHService handleRemoteNotification:userInfo];
        [self dataManager:userInfo];
        // 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以选择设置
        completionHandler(UNNotificationPresentationOptionAlert | UNNotificationPresentationOptionSound);
    } else {
        // 应用程序在后台给一个提示特别消息
        NSLog(@"UIApplicationStateBackground/UIApplicationStateInactive === ");
        [self dataManager:userInfo];
        // 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以选择设置
        completionHandler(UIBackgroundFetchResultNewData);
    }
}

还有一个问题这个方法

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo fetchCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler 

是iOS7以上包括iOS10,都能收到推送消息。

那这个方法

- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler

iOS10也能收到消息,一个是点击通知栏消息时调用,一个是APP在前台收到消息时调用,我这样理解没问题吧?


#13

是的,具体有个调用顺序等说明请阅读该忒中的图:


(zongzi) #14

好的,基本应该没问题了,谢谢,祝你们极光越做越好:tada:


#15

:yum:感谢,后续有问题可继续在社区提出。


(zongzi) #17

还有就是推送失败的概率有点高


(zongzi) #18


推送配置、别名都没问题,怎么收不到推送呢?


(zongzi) #19

大神,又有点问题问一下,设置别名的时候,会不会覆盖后台之前保存的别名,就是这种情况啊:我们是使用用户ID来当别名,用同一个账号登录不同手机,会设置2次别名,但是推送只会推到第一次设置别名的手机。按理说,应该重新设置别名会覆盖,推送到最新设置别名的手机上。这是怎么回事?


#20

1、一个设备只能设置一个别名,在一个设备上多次设置别名,最后一个有效
2、在不同设备上设备别名不会影响之前的设备
3、别名要设置成功,且成功的时间点在推送之前。


(zongzi) #21

我们测试同一个账号(同别名)在不同设备设置别名且都成功,只有第一次设置别名的设备会受到推送,其他设备没有收到。