效果展示.gif
一蘑拯、問題描述
程序啟動的時候會請求用戶是否打開推送钝满,如果打開則能收到推送的新聞內(nèi)容,相應(yīng)的功能按鈕也將打開申窘,如果沒有打開用戶可以在更多設(shè)置里去手動打開弯蚜,在我們的程序中并沒有通過打開和關(guān)閉按鈕去打開推送,而是讓用戶跳到系統(tǒng)的設(shè)置頁面去自己選擇是否打開剃法。
1>設(shè)置開關(guān)狀態(tài)值
// 設(shè)置開關(guān)狀態(tài)
self.switchView.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"push"];
2>判斷是否打開推送
/**
* 判斷是否打開推送
*/
+ (BOOL)isAllowedNotification {
// iOS8 check if user allow notification
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
// system is iOS8
UIUserNotificationSettings *setting = [[UIApplication sharedApplication] currentUserNotificationSettings];
if (UIUserNotificationTypeNone != setting.types) {
return YES;
}
} else {
//iOS7
UIRemoteNotificationType type = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
if(UIRemoteNotificationTypeNone != type)
return YES;
}
return NO;
}
3>跳轉(zhuǎn)到APP的系統(tǒng)設(shè)置界面
// 跳轉(zhuǎn)到APP的系統(tǒng)設(shè)置界面
if (switchView.isOn) {
NSURL * url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if([[UIApplication sharedApplication] canOpenURL:url]) {
NSURL*url =[NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:url];
}
}
二碎捺、解決思路
一開始對于這個功能一點也沒有具體的解決思路,而且一直在程序里去思考這個問題贷洲,當用戶跳到系統(tǒng)設(shè)置界面以后不管打開沒有打開再次進入到程序中時沒法知道是否打開也沒法更新數(shù)據(jù)收厨,之后突然想到當跳到系統(tǒng)設(shè)置界面的時候,程序已經(jīng)進入了后臺优构,自此有了我的解決方案诵叁。
1>當用戶跳轉(zhuǎn)到系統(tǒng)設(shè)置界面以后程序進入了后臺,而當再次進入時程序由后臺進入到前臺復(fù)原狀態(tài)钦椭,由此我們可以在applicationDidBecomeActive時發(fā)送一個通知拧额。
/**
當程序進入后臺碑诉,再返回時注冊發(fā)送通知
*/
- (void)applicationDidBecomeActive:(UIApplication *)application
{
// 發(fā)送通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"pushNoti" object:nil];
}
#######2>之后再需要更新數(shù)據(jù)的控制器里注冊通知,當收到通知時重新判斷是否打開了推送侥锦,然后更新數(shù)據(jù)进栽。
/**
* 在viewDidLoad里注冊通知
*/
- (void)viewDidLoad {
[super viewDidLoad];
// 是否打開通知使用NSUserDefaults存儲
[[NSUserDefaults standardUserDefaults] setBool:[WEFileUtils isAllowedNotification] forKey:@"push"];
// 注冊通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updataPush) name:@"pushNoti" object:nil];
}
/**
* 收到通知以后重新取值存儲然后更新數(shù)據(jù)
*/
- (void)updataPush{
[[NSUserDefaults standardUserDefaults] setBool:[WEFileUtils isAllowedNotification] forKey:@"push"];
[self.tableView reloadData];
}
三、結(jié)束語
自此應(yīng)用內(nèi)打開推送功能集成成功恭垦,當然目前新聞推送目前還沒有完美的方案去推送數(shù)據(jù)快毛,同時只是個人的一些思路和解決方案,寫的不足之處還望海涵署照,如果可以希望能夠提出一起討論交流祸泪。