uni-app 判断iOS系统推送功能是否开启,并可提醒去设置页打开设置推送

发布于 1周前 作者 htzhanglong 来自 Uni-App

uni-app 判断iOS系统推送功能是否开启,并可提醒去设置页打开设置推送

如果需要判断ios系统推送功能是否开启,并提醒去设置页打开设置推送,可以用以下nativeJS 代码:

function isOpenPush() {  
    var UIApplication = plus.ios.import("UIApplication");  
    var app = UIApplication.sharedApplication();  
    var enabledTypes = 0;  
    if (app.currentUserNotificationSettings) {  
        var settings = app.currentUserNotificationSettings();  
        enabledTypes = settings.plusGetAttribute("types");  
        console.log("enabledTypes1:" + enabledTypes);  
        if (enabledTypes == 0) {  
            plus.nativeUI.confirm("推送设置没有开启,是否去开启?", function(e) {  
                if (e.index == 0) {  
                    var NSURL2 = plus.ios.import("NSURL");  
                    var setting2 = NSURL2.URLWithString("app-settings:");  
                    var application2 = UIApplication.sharedApplication();  
                    application2.openURL(setting2);  
                    plus.ios.deleteObject(setting2);  
                    plus.ios.deleteObject(NSURL2);  
                    plus.ios.deleteObject(application2);  
                }  
            }, {  
                "buttons": ["Yes", "No"],  
                "verticalAlign": "center"  
            });  
        }  
        plus.ios.deleteObject(settings);  
    } else {  
        enabledTypes = app.enabledRemoteNotificationTypes();  
        if(enabledTypes == 0){  
            console.log("推送未开启!");  
        }else{  
            console.log("已经开启推送功能!")  
        }  
        console.log("enabledTypes2:" + enabledTypes);  
    }  
    plus.ios.deleteObject(app);  
}

此功能在uniapp项目且配置为自定义模式的时候,会报:“plus.ios.import is not a function”错误。 该问题已经在HBuilderX1.9.4.20190426 之后版本已经解决


1 回复

在uni-app中,要判断iOS系统推送功能是否开启,并引导用户去设置页面打开推送通知,通常需要借助原生插件或者UniPush服务来实现。由于uni-app本身不直接提供API来判断系统级推送权限,这里我们可以结合UniPush和iOS原生代码来实现这一功能。

步骤概述

  1. 集成UniPush:确保你的uni-app项目已经集成了UniPush服务。
  2. iOS原生代码判断推送权限:通过自定义原生插件或者扩展iOS项目来判断推送权限状态。
  3. 引导用户去设置页面:如果推送权限未开启,引导用户去系统设置页面开启。

代码示例

1. 集成UniPush

manifest.json中配置UniPush:

"mp-weixin": { // 其他平台配置类似
    "appid": "YOUR_APPID",
    "setting": {
        "urlCheck": false
    },
    "usingComponents": true,
    "push": {
        "provider": "unipush"
    }
}

2. iOS原生代码判断推送权限

创建一个自定义原生插件,在iOS平台实现判断推送权限的逻辑。这里以Objective-C为例:

MyPlugin.h

#import <Foundation/Foundation.h>

@interface MyPlugin : NSObject

+ (void)checkPushNotificationPermission:(NSCompletionHandler<NSNumber *> *)completionHandler;

@end

MyPlugin.m

#import "MyPlugin.h"
#import <UserNotifications/UserNotifications.h>

@implementation MyPlugin

+ (void)checkPushNotificationPermission:(NSCompletionHandler<NSNumber *> *)completionHandler {
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings *settings) {
        if (settings.authorizationStatus == UNAuthorizationStatusAuthorized) {
            completionHandler(@YES);
        } else {
            completionHandler(@NO);
        }
    }];
}

@end

3. 调用原生插件并引导用户

在uni-app的JavaScript代码中调用这个插件,并根据返回值判断是否引导用户:

plus.bridge.exec('MyPlugin', 'checkPushNotificationPermission', [], function(result) {
    if (!result) {
        // 推送未开启,引导用户去设置页面
        if (plus.os.name === 'iOS') {
            plus.runtime.openURL('app-settings:');
        } else {
            // Android等其他平台的处理逻辑
        }
    }
});

注意:plus.runtime.openURL('app-settings:') 在iOS上会直接打开系统设置页面,但在Android上需要不同的处理逻辑。

通过上述步骤,你可以在uni-app中实现判断iOS系统推送功能是否开启,并引导用户去设置页面开启推送通知的功能。

回到顶部