收到推送時程序內(nèi)的處理方案

一、問題描述

在應(yīng)用中經(jīng)常會添加推送,在我們的項(xiàng)目中也用到了推送,推送添加的是友盟的第三方推送方案,接入友盟的SDK只要按照步驟,接進(jìn)來也十分簡單,完全可以收到推送數(shù)據(jù),但問題是在收到推送數(shù)據(jù)時如何去處理收到的信息以及如何跳轉(zhuǎn)相應(yīng)的界面?這是我這篇文章主要介紹的。

二、解決思路

iOS提供收到推送時的處理方法,但是收到推送應(yīng)該從幾個方面來考慮這才是關(guān)鍵的點(diǎn),對于一個剛接觸的人來說也是不知所措,之后再網(wǎng)上查找零零碎碎的找到了一些突破點(diǎn),才完成了對于收到推送的處理方式,主要從以下兩個方面來考慮。

1>當(dāng)程序沒有死掉即在在前臺或者后臺時

/**
 *  收到推送時會在AppDelegate的didReceiveRemoteNotification中響應(yīng)事件
 */
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
       // 這里做收到推送時的處理userInfo為收到的數(shù)據(jù)
}
1)程序在運(yùn)行在前臺即處于UIApplicationStateActive狀態(tài)
處于UIApplicationStateActive狀態(tài)時的處理.jpg

在UIApplicationStateActive時只需要定義一個alertView來處理,在代理方法里跳轉(zhuǎn)相應(yīng)的詳情,當(dāng)然這個跳轉(zhuǎn)必須要有navigationController來跳轉(zhuǎn)并且navigationController要作為一個屬性。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    // 保存推送數(shù)據(jù)
     self.userInfos = userInfo;
      // 定制自定義的彈框
        if([UIApplication sharedApplication].applicationState == UIApplicationStateActive)
        {
            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"有新的要聞推薦哦~"
            message:userInfo[@"aps"][@"alert"]
            delegate:self
            cancelButtonTitle:@"取消"
            otherButtonTitles:@"立即前往", nil];
            [alertView show];
        }
}
alerView的代理方法里執(zhí)行跳轉(zhuǎn)詳情
#pragma mark -跳轉(zhuǎn)到推送詳情頁
- (void)notificationDetailVc {
    INHelpProtrolViewController *help = [[INHelpProtrolViewController alloc]init];
    help.urlString = self.userInfos[@"src_link"];
    [self.mainNavigationController pushViewController:help animated:YES];
}
2)程序在運(yùn)行在后臺但沒死掉即處于UIApplicationStateInactive狀態(tài)時
處于UIApplicationStateInactive狀態(tài)時.jpg
當(dāng)你點(diǎn)擊通知欄上的通知時程序程序會觸發(fā)didReceiveRemoteNotification方法
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{

     if ([UIApplication sharedApplication].applicationState == UIApplicationStateInactive){
            // 跳轉(zhuǎn)詳情頁面
                INHelpProtrolViewController *help = [[INHelpProtrolViewController alloc]init];
    help.urlString = self.userInfos[@"src_link"];
    [self.mainNavigationController pushViewController:help animated:YES];
        }
}

2>當(dāng)程序完全死掉時

當(dāng)程序完全死掉時.jpg
// 程序啟動時
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
/// 上面創(chuàng)建window,navgationController等操作,創(chuàng)建完成后判斷是否是由推送打開之后跳轉(zhuǎn)
#pragma mark -判斷是否由推送打開
    // 判斷是否是通過推送打開app
    NSDictionary *userInfos = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    if (userInfos) {
        // 保存數(shù)據(jù)
        self.userInfos = userInfos;
        // 跳轉(zhuǎn)詳情
           INHelpProtrolViewController *help = [[INHelpProtrolViewController alloc]init];
    help.urlString = self.userInfos[@"src_link"];
    [self.mainNavigationController pushViewController:help animated:YES];
    }
    return YES;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 極光推送: 1.JPush當(dāng)前版本是1.8.2,其SDK的開發(fā)除了正常的功能完善和擴(kuò)展外也緊隨蘋果官方的步伐,SD...
    Isspace閱讀 6,873評論 10 16
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,789評論 25 709
  • 推送通知 注意:這里說的推送通知跟NSNotification有所區(qū)別 NSNotification是抽象的,不可...
    iOS開發(fā)攻城獅閱讀 4,415評論 1 13
  • http://download.csdn.net/album/detail/3761 軟件工程題目 李明杰淺談逆...
    Flutter求學(xué)者閱讀 293評論 0 0
  • 從前我對石頭是沒多大興趣的,因?yàn)槲覀冃陆^很多,沿天山腳下的河道旁,大塊小塊的石頭擠滿了河岸。 我記得剛...
    美生活閱讀 839評論 0 0

友情鏈接更多精彩內(nèi)容