兼容iOS7以上设置推送,跳转app设置界面
来源:互联网 发布:大连软件职业学院几本 编辑:程序博客网 时间:2024/05/16 06:01
1、首先我们要明确推送实际上有2个开关:
(1)iOS系统(APNS协作)
(2)本地(我们自己的)服务器
所以,为了更好的用户体验,并且iOS有限制的情况下:
从关闭到打开,只能跳转APP 在系统设置 里的页面。
从打开到关闭,将是否接收推送的设置传给服务器端,服务器根据设置选择是否发送推送。假如某用户关闭推送,服务就不给改用户发送推送了。
2、另外一个要解决的是跳转iOS7 的app 设置界面的功能,附上代码:
//跳转到当前app的设置推送界面, iOS7的有点问题(未验证能否通过appstore审核)
+ (void)JumpToPushSetting
{
if ([self getOSVersion] >= 8.0f) {
NSURL * url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if([[UIApplication sharedApplication] canOpenURL:url]) {
NSURL*url =[NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:url];
}
}
else {
NSString *destPath = [NSString stringWithFormat:@"prefs:root=NOTIFICATIONS_ID&path=%@", [self getBundleID]];
NSURL*url2=[NSURL URLWithString:destPath];
[[UIApplication sharedApplication] openURL:url2];
}
}
//是否允许推送
+ (BOOL)IsAllowedNotification {
//iOS8 check if user allow notification
if ([self getOSVersion] >= 8.0f) {// system is iOS8
UIUserNotificationSettings *setting = [[UIApplication sharedApplication] currentUserNotificationSettings];
if (UIUserNotificationTypeNone != setting.types) {
return YES;
}
else
return NO;
} else {//iOS7
UIRemoteNotificationType type = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
if(UIRemoteNotificationTypeNone != type)
return YES;
else
return NO;
}
return NO;
}
//注册推送消息显示方式
+ (void)RegistPushNotificationSettings
{
UIApplication *application = [UIApplication sharedApplication];
//这下面注册,在第一次打开app的时候,会显示给用户 “是否允许推送通知”窗口
if ([application respondsToSelector:@selector(isRegisteredForRemoteNotifications)])
{
//IOS8
//创建UIUserNotificationSettings,并设置消息的显示类类型
UIUserNotificationSettings *notiSettings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIRemoteNotificationTypeSound) categories:nil];
[application registerUserNotificationSettings:notiSettings];
} else{ // ios7
[application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound |UIRemoteNotificationTypeAlert)];
}
}
+(NSString*)getAppVersion
{
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
//NSString *name = [infoDictionary objectForKey:@"CFBundleDisplayName"];
NSString *version = [infoDictionary objectForKey:@"CFBundleShortVersionString"];
//NSString *build = [infoDictionary objectForKey:@"CFBundleVersion"];
return version;
}
//获取APP本地的bundle ID
+(NSString*)getBundleID
{
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
NSString* bundleID = [infoDictionary objectForKey:@"CFBundleIdentifier"];
return bundleID;
}
3、以下是流程图:
- 兼容iOS7以上设置推送,跳转app设置界面
- ios 跳转设置 ios7
- iOS APP跳转设置界面以及设置中的其他界面
- Alert--兼容iOS7及以上的AlertView,支持设置对齐方式,支持设置行间距
- iOS 从APP跳转至APP的系统设置界面
- android 仿ios7设置界面
- ios 界面跳转设置
- IOS 跳转设置界面
- iOS 跳转设置界面
- iOS 跳转设置界面
- iOS 跳转设置界面
- 跳转更多设置界面
- ios跳转设置界面
- android跳转到设置中的App Info界面
- iOS开发之app跳转至各系统设置界面
- 关于app跳转到系统设置的指定界面
- iOS中APP跳转到系统的各种设置界面
- 关于App内跳转到设置界面的问题
- size_type和size_t的总结
- Jackson 框架,轻易转换JSON
- ecshop首页滚动仿京东全球购大图配2小图
- ascii' codec can't encode characters in position 598-599: ordinal not in range(128)解决方案
- Java正则表达式
- 兼容iOS7以上设置推送,跳转app设置界面
- 如何在Spring容器中加载自定义的配置文件
- 关于人生的
- 模板
- 模拟退火法
- 斯坦福大学机器学习-note9
- RESTful API 设计指南
- 第五章:JavaScript中的数组
- 如何在C/C++中动态分配二维数组