第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過推送通知檢測應用程序是否已啟動/打開

通過推送通知檢測應用程序是否已啟動/打開

iOS
森林海 2019-10-15 14:44:42
是否可以通過推送通知了解應用程序是否已啟動/打開?我猜發(fā)射事件可以在這里找到:- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    if (launchOptions != nil) {         // Launched from push notification         NSDictionary *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];    }}但是,當應用程序在后臺運行時,如何從推送通知中檢測到它已打開?
查看完整描述

3 回答

?
幕布斯7119047

TA貢獻1794條經(jīng)驗 獲得超8個贊

請參閱以下代碼:


- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

{

    if ( application.applicationState == UIApplicationStateInactive || application.applicationState == UIApplicationStateBackground  )

    {

         //opened from a push notification when the app was on background

    }

}

如同


-(void)application:(UIApplication *)application didReceiveLocalNotification (UILocalNotification *)notification


查看完整回答
反對 回復 2019-10-15
?
四季花海

TA貢獻1811條經(jīng)驗 獲得超5個贊

晚了,但也許有用


當應用未運行時


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions


叫做 ..


您需要檢查推送通知的地方


NSDictionary *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

if (notification) {

    NSLog(@"app recieved notification from remote%@",notification);

    [self application:application didReceiveRemoteNotification:notification];

} else {

    NSLog(@"app did not recieve notification");

}


查看完整回答
反對 回復 2019-10-15
?
慕碼人2483693

TA貢獻1860條經(jīng)驗 獲得超9個贊

應用啟動后,我們無法正確更新視圖。這里有復雜的生命周期方法序列,令人困惑。


生命周期方法


我們對iOS 10的測試揭示了針對各種情況的以下生命周期方法序列:


DELEGATE METHODS CALLED WHEN OPENING APP  


Opening app when system killed or user killed  

    didFinishLaunchingWithOptions  

    applicationDidBecomeActive    


Opening app when backgrounded  

    applicationWillEnterForeground  

    applicationDidBecomeActive  


DELEGATE METHODS WHEN OPENING PUSH


Opening push when system killed

    [receiving push causes didFinishLaunchingWithOptions (with options) and didReceiveRemoteNotification:background]

    applicationWillEnterForeground

    didReceiveRemoteNotification:inactive

    applicationDidBecomeActive


Opening push when user killed

    didFinishLaunchingWithOptions (with options)

    didReceiveRemoteNotification:inactive [only completionHandler version]

    applicationDidBecomeActive


Opening push when backgrounded

    [receiving push causes didReceiveRemoteNotification:background]

    applicationWillEnterForeground

    didReceiveRemoteNotification:inactive

    applicationDidBecomeActive

問題


好的,所以現(xiàn)在我們需要:


確定用戶是否通過推送打開應用

根據(jù)推送狀態(tài)更新視圖

清除狀態(tài),以免隨后的打開不會使用戶回到同一位置。

棘手的一點是,必須在應用程序實際處于活動狀態(tài)時更新視圖,這在所有情況下都是相同的生命周期方法。


我們的解決方案示意圖


以下是我們解決方案的主要組成部分:


將notificationUserInfo實例變量存儲在AppDelegate上。

設置notificationUserInfo = nil在這兩個applicationWillEnterForeground和didFinishLaunchingWithOptions。

設置notificationUserInfo = userInfo在didReceiveRemoteNotification:inactive

從applicationDidBecomeActive總是調用自定義方法openViewFromNotification并傳遞self.notificationUserInfo。如果self.notificationUserInfo為nil,則提早返回,否則根據(jù)中的通知狀態(tài)打開視圖self.notificationUserInfo。

說明


當通過推送打開didFinishLaunchingWithOptions或applicationWillEnterForeground總是在緊接之前調用時didReceiveRemoteNotification:inactive,因此我們首先在這些方法中重置notificationUserInfo,以確保沒有過時的狀態(tài)。然后,如果didReceiveRemoteNotification:inactive調用了,我們就知道我們要從推送中打開,因此我們將self.notificationUserInfo其設置為拾取,然后applicationDidBecomeActive將用戶轉發(fā)到正確的視圖。


最后一種情況是用戶是否在應用程序切換器中打開了該應用程序(即,在應用程序處于前臺時雙擊主屏幕按鈕),然后接收到推送通知。在這種情況下,僅會didReceiveRemoteNotification:inactive被調用,而WillEnterForeground和didFinishLaunching都不會被調用,因此您需要一些特殊的狀態(tài)來處理這種情況。


希望這可以幫助。


查看完整回答
反對 回復 2019-10-15
  • 3 回答
  • 0 關注
  • 674 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號