2016-04-22 55 views
6

我已經在我們的應用程序中實現了Handoff,當應用程序在前臺運行或在後臺運行時,它對web到應用程序的切換工作正常,反之亦然。ios Handoff在launchOptions中缺少NSUserActivity?

但是,如果應用程序沒有運行,那麼如果用戶從web啓動應用程序到應用程序切換,在launchOptions字典中,我得到UIApplicationLaunchOptionsUserActivityDictionaryKey,但是缺少對該活動的引用。

見截圖:

enter image description here

正如你可以看到,我只得到了ID爲NSUserActivity。 這是iOS 9中的錯誤嗎?

有沒有辦法通過使用id來獲取對活動的引用?

編輯,這裏是代碼,雖然我不認爲這是相關

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    if (launchOptions && [[launchOptions allKeys] containsObject:UIApplicationLaunchOptionsUserActivityDictionaryKey]) { 
     __block NSUserActivity *activity; 

     NSDictionary *userActivityDictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsUserActivityDictionaryKey]; 
     if (userActivityDictionary) { 
      [userActivityDictionary enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { 
       if ([obj isKindOfClass:[NSUserActivity class]]) { 
        activity = obj; 
       } 
      }]; 
     } 

     //app was started by URL (deep linking), check parameters 
     if (activity) { 
      NSURL *url = activity.webpageURL; 
      //resume from URL 
     } 
    } 

    return YES; 
} 
+0

hey lefteris;你能分享一下你的代碼嗎? –

+0

@SuhasPatil添加了代碼,雖然我認爲這沒有關係 – Lefteris

+0

代碼看起來不錯,您是否嘗試了另一種方法(BOOL)應用程序:continueUserActivity:restorationHandler並檢查您提供的活動類型是否爲plist。 –

回答

5

好吧,

我已經提交了TSI這個蘋果,似乎這是不是一個錯誤,而是設計。

你可以在application:continueUserActivity:restorationHandler委託中恢復你的活動,在我的情況下,這個委託沒有被調用。

嗯,我的錯誤是你需要在application:didFinishLaunchingWithOptions:方法中返回YES,否則如果返回NO,則不調用application:continueUserActivity:restorationHandler

我們已經在我們的應用程序中實現了FB,所以我們返回[[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions]哪個返回NO。

我在application:didFinishLaunchingWithOptions:功能改變了我們的代碼,這

if (launchOptions && [[launchOptions allKeys] containsObject:UIApplicationLaunchOptionsUserActivityDictionaryKey]) { 
     return YES; 
    } 
else { 
     return [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions]; 
} 

這樣的application:continueUserActivity:restorationHandler委託的成功調用,並且活動可以成功地恢復。