jpush-react-native
jpush-react-native copied to clipboard
重构版删除了 `hasPermission` api,判断用户是否允许了推送通知的权限。能否添加回这个api
你的运行环境
System:
OS: macOS 10.14.6
CPU: (12) x64 Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
Memory: 59.57 MB / 16.00 GB
Shell: 5.3 - /bin/zsh
Binaries:
Node: 12.3.1 - /usr/local/bin/node
Yarn: 1.16.0 - /usr/local/bin/yarn
npm: 6.11.3 - /usr/local/bin/npm
Watchman: 4.9.0 - /usr/local/bin/watchman
SDKs:
iOS SDK:
Platforms: iOS 13.1, DriverKit 19.0, macOS 10.15, tvOS 13.0, watchOS 6.0
Android SDK:
API Levels: 21, 23, 26, 27, 28
Build Tools: 23.0.1, 26.0.1, 28.0.3, 29.0.2
IDEs:
Android Studio: 3.5 AI-191.8026.42.35.5900203
Xcode: 11.1/11A1027 - /usr/bin/xcodebuild
npmPackages:
react: 16.9.0 => 16.9.0
react-native: 0.61.2 => 0.61.2
- 插件版本:
"jcore-react-native": "^1.3.7",
"jpush-react-native": "^2.5.10",
- react-native 版本:
0.61.2
期望效果
之前版本的api 有hasPermission
这个api 检查用户是否开启了推送通知的权限。
实际效果
新版本的库没有了hasPermission
这个api。希望能重新加回来
你的运行环境
System: OS: macOS 10.14.6 CPU: (12) x64 Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz Memory: 59.57 MB / 16.00 GB Shell: 5.3 - /bin/zsh Binaries: Node: 12.3.1 - /usr/local/bin/node Yarn: 1.16.0 - /usr/local/bin/yarn npm: 6.11.3 - /usr/local/bin/npm Watchman: 4.9.0 - /usr/local/bin/watchman SDKs: iOS SDK: Platforms: iOS 13.1, DriverKit 19.0, macOS 10.15, tvOS 13.0, watchOS 6.0 Android SDK: API Levels: 21, 23, 26, 27, 28 Build Tools: 23.0.1, 26.0.1, 28.0.3, 29.0.2 IDEs: Android Studio: 3.5 AI-191.8026.42.35.5900203 Xcode: 11.1/11A1027 - /usr/bin/xcodebuild npmPackages: react: 16.9.0 => 16.9.0 react-native: 0.61.2 => 0.61.2
- 插件版本:
"jcore-react-native": "^1.3.7", "jpush-react-native": "^2.5.10",
- react-native 版本:
0.61.2
期望效果
�之前版本的api 有
hasPermission
这个api 检查用户是否开启了推送通知的权限。实际效果
新版本的库没有了
hasPermission
这个api。希望能重新加回来
你需要什么权限判断?接收通知是不用判断权限的
@wicked-tc130 判断用户是否允许了我的app接收推送。和jpush
接收通知的业务无关,是我们的业务需要用到这个功能
app第一次安装的时候,系统会询问用户是否允许app推送通知。我的需求就是要获取到用户是点了允许还是拒绝
app第一次安装的时候,系统会询问用户是否允许app推送通知。我的需求就是要获取到用户是点了允许还是拒绝
android没有申请通知弹框权限,你可以翻下之前的代码
ios现在是支持的,只要你按照demo集成
这是之前的代码:
private boolean hasPermission(String appOpsServiceId) {
Context context = getReactApplicationContext();
if (Build.VERSION.SDK_INT >= 24) {
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(
Context.NOTIFICATION_SERVICE);
return mNotificationManager.areNotificationsEnabled();
}else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
AppOpsManager mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
ApplicationInfo appInfo = context.getApplicationInfo();
String pkg = context.getPackageName();
int uid = appInfo.uid;
Class appOpsClazz;
try {
appOpsClazz = Class.forName(AppOpsManager.class.getName());
Method checkOpNoThrowMethod = appOpsClazz.getMethod("checkOpNoThrow", Integer.TYPE, Integer.TYPE,
String.class);
Field opValue = appOpsClazz.getDeclaredField(appOpsServiceId);
int value = opValue.getInt(Integer.class);
Object result = checkOpNoThrowMethod.invoke(mAppOps, value, uid, pkg);
return Integer.parseInt(result.toString()) == AppOpsManager.MODE_ALLOWED;
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
return false;
}
app第一次安装的时候,系统会询问用户是否允许app推送通知。我的需求就是要获取到用户是点了允许还是拒绝
@wicked-tc130 你误解了我的意思,我需求是:我要拿到一个boolean
值,判断用户是否
允许了app推送通知,也就是是否
打开了通知权限。这个功能在重构前版本中是有的:即:hasPermission
这个api
之前代码iOS
端的实现:
RCT_EXPORT_METHOD(hasPermission:(RCTResponseSenderBlock)callback) {
float systemVersion = [[UIDevice currentDevice].systemVersion floatValue];
if (systemVersion >= 8.0) {
UIUserNotificationSettings *settings = [[UIApplication sharedApplication] currentUserNotificationSettings];
UIUserNotificationType type = settings.types;
if (type == UIUserNotificationTypeNone) {
callback(@[@(NO)]);
} else {
callback(@[@(YES)]);
}
} else if (systemVersion >= 10.0) {
[[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
switch (settings.authorizationStatus)
{
case UNAuthorizationStatusDenied:
case UNAuthorizationStatusNotDetermined:
callback(@[@(NO)]);
break;
case UNAuthorizationStatusAuthorized:
callback(@[@(YES)]);
break;
}
}];
}
}
之前代码
iOS
端的实现:RCT_EXPORT_METHOD(hasPermission:(RCTResponseSenderBlock)callback) { float systemVersion = [[UIDevice currentDevice].systemVersion floatValue]; if (systemVersion >= 8.0) { UIUserNotificationSettings *settings = [[UIApplication sharedApplication] currentUserNotificationSettings]; UIUserNotificationType type = settings.types; if (type == UIUserNotificationTypeNone) { callback(@[@(NO)]); } else { callback(@[@(YES)]); } } else if (systemVersion >= 10.0) { [[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) { switch (settings.authorizationStatus) { case UNAuthorizationStatusDenied: case UNAuthorizationStatusNotDetermined: callback(@[@(NO)]); break; case UNAuthorizationStatusAuthorized: callback(@[@(YES)]); break; } }]; } }
我认为这个属于业务逻辑。既然你能找到,可以把它加到你的代码中,或者在你的工程里修改RN-JPush源码
@wicked-tc130 这是属于业务逻辑,但是这个业务逻辑与推送相关,不懂原生的RN
开发者是依赖于封装好的库,我认为添加回这个api
有利于构建更好的RN
的生态。RN里开发者可选择的消息推送的库不多,还是烦请您再考虑一下。
@wicked-tc130 这是属于业务逻辑,但是这个业务逻辑与推送相关,不懂原生的
RN
开发者是依赖于封装好的库,我认为添加回这个api
有利于构建更好的RN
的生态。RN里开发者可选择的消息推送的库不多,还是烦请您再考虑一下。
下个大版本会加上
等这个api添加上了再关闭吧 : )
拥有这个功能的版本多久发布
如果我按你的之前的版本的方法拷贝过来可行吗?
这个功能什么时候会加上?
@wicked-tc130 这是属于业务逻辑,但是这个业务逻辑与推送相关,不懂原生的
RN
开发者是依赖于封装好的库,我认为添加回这个api
有利于构建更好的RN
的生态。RN里开发者可选择的消息推送的库不多,还是烦请您再考虑一下。下个大版本会加上
请问加上去了吗,现在2022年12月了
所以获取应用列表,MAC地址,AndroidID啥的怎么让他在获取隐私权限后再搞?