jpush-react-native
jpush-react-native copied to clipboard
Not get deviceToken yet,ios 获取device token失败
你的运行环境
iphone 6 plus : ios12.4 iphone x : ios13.2 xcode11 开发环境
- 插件版本: "jcore-react-native": "^1.7.5", "jmessage-react-plugin": "^3.1.7", "jpush-react-native": "^2.7.5",
- react-native 版本: react-native 0.60.5
期望效果
项目集成jpush后,可以正常获取deviceToken ,让ios可以走APNS推送
实际效果
1、详细阅读了相关文档并将example跑通,example项目设为我们的bundleID和appkey可以正常获取deviceToken。 2、本地项目集成时,可以正常注册极光,收自定义消息,无法正常获取deviceToken。 3、查询相关资料,把需求尝试的操作都试过,还是无法获取deviceToken 相关文档:https://community.jiguang.cn/article/56461
Debug logs
` 2020-03-25 15:08:57.778250+0800 peachWork[402:22556] You've implemented -[<UIApplicationDelegate> application:didReceiveRemoteNotification:fetchCompletionHandler:], but you still need to add "remote-notification" to the list of your supported UIBackgroundModes in your Info.plist. 2020-03-25 15:08:57.782791+0800 peachWork[402:22776] | JIGUANG | I - [JIGUANGService] --------------------------- JPush Log ---------------------------- --------------------JPush SDK Version:3.2.8--build:106---------- --------------------JCore Lib Version:2.1.8--build:101---------- -----------------AppKey:3447269d794c5fc41c367bc2----------------
2020-03-25 15:08:57.786646+0800 peachWork[402:22774] | JIGUANG | DD - [JIGUANGUtilities] idfa version
2020-03-25 15:08:57.832236+0800 peachWork[402:22764] | JIGUANG | E - [JIGUANGConfigController] advertisingIdentifier无效,将不上报advertisingIdentifier值。请检查'启动SDK方法'中的参数值,或者是否限制广告跟踪
2020-03-25 15:08:57.843244+0800 peachWork[402:22775] | JIGUANG | I - [JIGUANGConnectManager] Action - closeConection
2020-03-25 15:08:57.845542+0800 peachWork[402:22775] | JIGUANG | D - [JIGUANGHelper] +[JPUSHHelper postNotification:withUserInfo:] name: kJPFNetworkIsConnectingNotification (null)
2020-03-25 15:08:57.846406+0800 peachWork[402:22775] | JIGUANG | D - [JIGUANGSisManager] Action - isSisOnProtect
2020-03-25 15:08:57.846886+0800 peachWork[402:22775] | JIGUANG | D - [JIGUANGSisManager] sis is not on protect
2020-03-25 15:08:57.849475+0800 peachWork[402:22768] | JIGUANG | I - [JIGUANGClientController] Action - jpush setup
2020-03-25 15:08:58.006908+0800 peachWork[402:22779] [NetworkInfo] Signal strength query returned error: Error Domain=NSPOSIXErrorDomain Code=13 "Permission denied", descriptor: <CTServiceDescriptor 0x2812df720, domain=1, instance=1>
2020-03-25 15:08:58.011198+0800 peachWork[402:22764] | JIGUANG | D - [JIGUANGUdpSocket] send udp data
2020-03-25 15:08:58.012236+0800 peachWork[402:22764] | JIGUANG | D - [JIGUANGUdpSocket] send udp data succeed
2020-03-25 15:08:58.012599+0800 peachWork[402:22764] | JIGUANG | D - [JIGUANGUdpSocket] udp socket begin send behavior
2020-03-25 15:08:58.083115+0800 peachWork[402:22764] | JIGUANG | DD - [JIGUANGSdkController] sdk info not change
2020-03-25 15:08:58.403 [info][tid:main][RCTCxxBridge.mm:236] Initializing <RCTCxxBridge: 0x123d0d1f0> (parent: <RCTBridge: 0x2839c31e0>, executor: (null))
2020-03-25 15:08:58.406202+0800 peachWork[402:22556] Initializing <RCTCxxBridge: 0x123d0d1f0> (parent: <RCTBridge: 0x2839c31e0>, executor: (null))
2020-03-25 15:08:58.515 [warn][tid:main][RCTModuleData.mm:67] Module RCTJMessageModule requires main queue setup since it overrides init
but doesn't implement requiresMainQueueSetup
. In a future release React Native will default to initializing all native modules on a background thread unless explicitly opted-out of.
2020-03-25 15:08:58.514765+0800 peachWork[402:22556] Module RCTJMessageModule requires main queue setup since it overrides init
but doesn't implement requiresMainQueueSetup
. In a future release React Native will default to initializing all native modules on a background thread unless explicitly opted-out of.
2020-03-25 15:08:58.516 [warn][tid:main][RCTModuleData.mm:67] Module AudioRecorderManager requires main queue setup since it overrides constantsToExport
but doesn't implement requiresMainQueueSetup
. In a future release React Native will default to initializing all native modules on a background thread unless explicitly opted-out of.
2020-03-25 15:08:58.516538+0800 peachWork[402:22556] Module AudioRecorderManager requires main queue setup since it overrides constantsToExport
but doesn't implement requiresMainQueueSetup
. In a future release React Native will default to initializing all native modules on a background thread unless explicitly opted-out of.
2020-03-25 15:08:58.527 [info][tid:main][RCTRootView.m:293] Running application peachWork ({
initialProps = {
};
rootTag = 1;
})
2020-03-25 15:08:58.526971+0800 peachWork[402:22556] Running application peachWork ({
initialProps = {
};
rootTag = 1;
})
2020-03-25 15:08:58.539992+0800 peachWork[402:22782] | JIGUANG | W - [JIGUANGService] 请将JPush的初始化方法,添加到[UIApplication application: didFinishLaunchingWithOptions:]方法中,否则JPush将不能准确的统计到通知的点击数量。参考文档:https://docs.jiguang.cn/jpush/client/iOS/ios_guide_new/#_6
2020-03-25 15:08:58.610088+0800 peachWork[402:22764] | JIGUANG | DD - [JIGUANGLocationController] locationManager didChangeAuthorizationStatus:0
2020-03-25 15:08:59.855158+0800 peachWork[402:22782] | JIGUANG | W - [JIGUANGDeviceTokenController] Not get deviceToken yet. After successful login, a custom message can be sent, but the APNs notification cannot. Until the deviceToken is obtained and reported successfully, the APNs notification can be used normally.
2020-03-25 15:09:00.021093+0800 peachWork[402:22779] [NetworkInfo] Signal strength query returned error: Error Domain=NSPOSIXErrorDomain Code=13 "Permission denied", descriptor: <CTServiceDescriptor 0x2812ef900, domain=1, instance=1>
2020-03-25 15:09:00.031853+0800 peachWork[402:22774] | JIGUANG | D - [JIGUANGUdpSocket] send udp data
2020-03-25 15:09:00.032932+0800 peachWork[402:22774] | JIGUANG | D - [JIGUANGUdpSocket] send udp data succeed
2020-03-25 15:09:00.033492+0800 peachWork[402:22774] | JIGUANG | D - [JIGUANGUdpSocket] udp socket begin send behavior
2020-03-25 15:09:00.038728+0800 peachWork[402:22774] | JIGUANG | D - [JIGUANGUdpSis] Action - parse
2020-03-25 15:09:00.117487+0800 peachWork[402:22782] | JIGUANG | D - [JIGUANGUdpSocket] close udp socket
2020-03-25 15:09:00.120708+0800 peachWork[402:22782] | JIGUANG | D - [JIGUANGUdpSocket] close udp socket
2020-03-25 15:09:00.127132+0800 peachWork[402:22779] [NetworkInfo] Signal strength query returned error: Error Domain=NSPOSIXErrorDomain Code=13 "Permission denied", descriptor: <CTServiceDescriptor 0x2812ebde0, domain=1, instance=1>
2020-03-25 15:09:00.134446+0800 peachWork[402:22779] [NetworkInfo] Signal strength query returned error: Error Domain=NSPOSIXErrorDomain Code=13 "Permission denied", descriptor: <CTServiceDescriptor 0x2812eb120, domain=1, instance=1>
2020-03-25 15:09:00.171267+0800 peachWork[402:22764] | JIGUANG | D - [JIGUANGTcpSocket] 连接主机成功
2020-03-25 15:09:00.175015+0800 peachWork[402:22764] | JIGUANG | D - [JIGUANGHelper] +[JPUSHHelper postNotification:withUserInfo:] name: kJPUSHNetworkDidSetupNotification (null)
2020-03-25 15:09:00.179273+0800 peachWork[402:22764] | JIGUANG | D - [JIGUANGTcpChannelController] Action - doSendTcpRequest
2020-03-25 15:09:00.191714+0800 peachWork[402:22764] | JIGUANG | D - [JIGUANGClientInfo] current login flag is:login
2020-03-25 15:09:00.413293+0800 peachWork[402:22764] | JIGUANG | I - [JIGUANGTcpEventController]
----- login result -----
uid:37807817386
registrationID:1a1018970a3842e5817
idc:1
2020-03-25 15:09:00.414385+0800 peachWork[402:22764] | JIGUANG | D - [JMSGReceiver] Action - p_didJPushDidLoginNotification:
2020-03-25 15:09:00.416616+0800 peachWork[402:22764] | JIGUANG | D - [JMessage] Action - init - JMessage
`
我碰到类似问题,是xcode没有开启Push Notification
.
我同样是这个错误, 首先确保证书,网络,权限,都是配置好的,我也加入了 Push Notification 能力
因为我是使用 expo 导出的项目,ios 目录里的 AppDelegate.mm 初始化代码和原生RN代码不一样,expo 已经有一个初始化 didRegisterForRemoteNotificationsWithDeviceToken 方法了,目测是覆盖极光的定义了,所以我修改了这里就好了,希望帮到另一个同样的我😭
直接贴出AppDelegate.mm所有代码,以备后续不时之需
#import "AppDelegate.h"
#import <React/RCTBundleURLProvider.h>
#import <React/RCTLinkingManager.h>
#import "JPUSHService.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.moduleName = @"main";
// You can add your custom initial props in the dictionary below.
// They will be passed down to the ViewController used by React Native.
self.initialProps = @{};
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
{
#if DEBUG
return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@".expo/.virtual-metro-entry"];
#else
return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
#endif
}
// Linking API
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
return [super application:application openURL:url options:options] || [RCTLinkingManager application:application openURL:url options:options];
}
// Universal Links
- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
BOOL result = [RCTLinkingManager application:application continueUserActivity:userActivity restorationHandler:restorationHandler];
return [super application:application continueUserActivity:userActivity restorationHandler:restorationHandler] || result;
}
// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
[JPUSHService registerDeviceToken:deviceToken];
return [super application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}
// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
return [super application:application didFailToRegisterForRemoteNotificationsWithError:error];
}
// Explicitly define remote notification delegates to ensure compatibility with some third-party libraries
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
[JPUSHService handleRemoteNotification:userInfo];
return [super application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
}
// iOS 10 Support
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
// Required
NSDictionary * userInfo = notification.request.content.userInfo;
if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
[JPUSHService handleRemoteNotification:userInfo];
}
completionHandler(UNNotificationPresentationOptionAlert); // 需要执行这个方法,选择是否提醒用户,有 Badge、Sound、Alert 三种类型可以选择设置
}
// iOS 10 Support
- (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]]) {
[JPUSHService handleRemoteNotification:userInfo];
}
completionHandler(); // 系统要求执行这个方法
}
@end