getNotificationAuth.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. const getAndroidNotificationAuth = () => {
  2. const main = plus.android.runtimeMainActivity();
  3. let NotificationManagerCompat = plus.android.importClass(
  4. 'android.support.v4.app.NotificationManagerCompat',
  5. );
  6. // android.support.v4 升级为 androidx
  7. if (!NotificationManagerCompat) {
  8. NotificationManagerCompat = plus.android.importClass(
  9. 'androidx.core.app.NotificationManagerCompat',
  10. );
  11. }
  12. const isNotificationsEnabled
  13. = NotificationManagerCompat.from(main).areNotificationsEnabled();
  14. if (!isNotificationsEnabled) {
  15. uni.showModal({
  16. title: '推送需要通知栏权限',
  17. content: '是否开启通知栏权限?',
  18. success: (res) => {
  19. if (res.confirm) {
  20. openAndroidNotification();
  21. } else if (res.cancel) {
  22. console.warn('用户点击取消');
  23. }
  24. },
  25. });
  26. }
  27. };
  28. const getIOSNotificationAuth = () => {
  29. const UIApplication = plus.ios.import('UIApplication');
  30. const app = UIApplication.sharedApplication();
  31. if (app.currentUserNotificationSettings) {
  32. const settings = app.currentUserNotificationSettings();
  33. const enabledTypes = settings?.plusGetAttribute('types');
  34. console.log('enabledTypes:' + enabledTypes);
  35. if (enabledTypes === 0) {
  36. uni.showModal({
  37. title: '推送需要通知栏权限',
  38. content: '是否开启通知栏权限?',
  39. success: (res) => {
  40. if (res.confirm) {
  41. openIOSNotification();
  42. } else if (res.cancel) {
  43. console.log('用户点击取消');
  44. }
  45. },
  46. });
  47. }
  48. plus.ios.deleteObject(settings);
  49. }
  50. };
  51. export const getNotificationAuth = () => {
  52. const platform = uni.getSystemInfoSync().platform;
  53. if (platform === 'ios') {
  54. getIOSNotificationAuth();
  55. } else if (platform === 'android') {
  56. getAndroidNotificationAuth();
  57. }
  58. };
  59. const openAndroidNotification = () => {
  60. const main = plus.android.runtimeMainActivity();
  61. const pkName = main.getPackageName();
  62. const uid = main.getApplicationInfo().plusGetAttribute('uid');
  63. const Intent = plus.android.importClass('android.content.Intent');
  64. const Build = plus.android.importClass('android.os.Build');
  65. const intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS');
  66. // 安卓不同版本差异
  67. if (Build.VERSION.SDK_INT >= 26) {
  68. intent.putExtra('android.provider.extra.APP_PACKAGE', pkName);
  69. } else if (Build.VERSION.SDK_INT >= 21) {
  70. intent.putExtra('app_package', pkName);
  71. intent.putExtra('app_uid', uid);
  72. } else {
  73. intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
  74. const uri = Uri.fromParts(
  75. 'package',
  76. mainActivity.getPackageName(),
  77. null,
  78. );
  79. intent.setData(uri);
  80. }
  81. // 跳转到该应用的系统通知设置页
  82. main.startActivity(intent);
  83. };
  84. const openIOSNotification = () => {
  85. const UIApplication = plus.ios.import('UIApplication');
  86. const app = UIApplication.sharedApplication();
  87. const settings = app.currentUserNotificationSettings();
  88. const NSURL = plus.ios.import('NSURL');
  89. const appSetting = NSURL.URLWithString('app-settings:');
  90. const application = UIApplication.sharedApplication();
  91. application.openURL(appSetting);
  92. plus.ios.deleteObject(appSetting);
  93. plus.ios.deleteObject(NSURL);
  94. plus.ios.deleteObject(application);
  95. plus.ios.deleteObject(settings);
  96. };