2014-12-30 15 views
12

Wiem, że api openParentApplication w zestawie do zegarka może otworzyć aplikację hosta w tle, ale nie na pierwszym planie.Uruchamianie aplikacji hosta z aplikacji zegarka

Próbowałem też za pomocą openUrl() API NSExtensionContext jak poniżej:

NSExtensionContext *ctx = [[NSExtensionContext alloc] init]; 

NSURL *url = [NSURL URLWithString:@"myScheme://today"]; 
[ctx openURL:url completionHandler:^(BOOL success) { 
    NSLog(@"fun=%s after completion. success=%d", __func__, success); 
}]; 
[ctx completeRequestReturningItems:ctx.inputItems completionHandler:nil]; 

Tutaj też aplikacja hosta nie jest uruchomiona. Czy czegoś brakuje? lub czy nie jest możliwe uruchomienie aplikacji hosta z rozszerzenia zestawu zegarów?

Odpowiedz

9

Jeśli chcesz otworzyć swoją aplikację macierzystą na pierwszym planie, użyj Handoff!

https://developer.apple.com/handoff/

Przykład:

Gdzieś wspólny dla obu:

static let sharedUserActivityType = "com.yourcompany.yourapp.youraction" 
static let sharedIdentifierKey = "identifier" 

na zegarku:

updateUserActivity(sharedUserActivityType, userInfo: [sharedIdentifierKey : 123456], webpageURL: nil) 

na iPhone App Delegat:

func application(application: UIApplication, willContinueUserActivityWithType userActivityType: String) -> Bool { 
    if (userActivityType == sharedUserActivityType) { 
     return true 
    } 
    return false 
} 

func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]!) -> Void) -> Bool { 
    if (userActivity.activityType == sharedUserActivityType) { 
     if let userInfo = userActivity.userInfo as? [String : AnyObject] { 
      if let identifier = userInfo[sharedIdentifierKey] as? Int { 
       //Do something 
       let alert = UIAlertView(title: "Handoff", message: "Handoff has been triggered for identifier \(identifier)" , delegate: nil, cancelButtonTitle: "Thanks for the info!") 
       alert.show() 
       return true 
      } 
     } 
    } 
    return false 
} 

I wreszcie (ten krok jest ważny !!!): W Info.plist (ów)

enter image description here

+0

Czy przeczytałeś dokumentację i obejrzałeś film? – stk

+0

Czy ten kod wyświetla alert, o którym Pan wspomniał? –

+0

To powinno, tak. Czy to nie działa? – stk

21

Od wersji Beta 3 systemu iOS 8.2 obecnie nie można otworzyć aplikacji na iOS na pierwszym planie. Jak powiedziałeś openParentApplication można otworzyć aplikację w tle. Niestety nie ma oznak API do otwierania aplikacji na iPhone'a.

Wiele postów na Apple Dev forum wspomniał, że to nie jest możliwe

https://devforums.apple.com/message/1076125#1076125

Prawidłowe powiadomienie nadal może zadeklarować działania tła że aplikacja iPhone będzie obsługiwać, więc w tym sensie można go uruchomić aplikacja na iPhone'a. Ale aplikacja na iPhone'a nie może zostać przeniesiona na pierwszy plan dzięki aplikacji WatchKit.

A drugi po

https://devforums.apple.com/message/1082620#1082620

Na urządzeniu, to [Watch app] nie - przynieść swoją aplikację na iOS na pierwszym planie.

+2

Dzięki za pamięć ME Forum programistów Apple. To było miejsce zapomniane przez długi czas. Zasługujesz na 50 powtórzeń. –

+1

Czy można wykryć, czy host/główna aplikacja jest już otwarta i na pierwszym planie? –

12

jestem pełen nadziei, że Apple dostarczy API do uruchamiania aplikacji nadrzędnej z app zegarka w przyszłej wersji beta, ale teraz udało mi się to osiągnąć, wykonując następujące ...

zadzwoń openParentApplication:reply: jako normalny:

- (void)openPhoneApp { 
    [WKInterfaceController openParentApplication:[NSDictionary new] reply:nil]; 
} 

Wdrożenie application:handleWatchKitExtensionRequest:reply: w AppDelegate i uruchomi się za pomocą schematu URL:

- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void(^)(NSDictionary *replyInfo))reply { 
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"myappscheme://open"]]; 
} 
+0

Doskonała sugestia. Próbowałem tego samego kodu z rozszerzeń, ale nie było tam obsługiwane. Czy aplikacja zostanie zatwierdzona? Czy to jest legalne? –

+0

Nie jestem pewien, czy Apple by to zatwierdzić. Nie rozumiem, dlaczego nie, ponieważ, o ile wiem, nie łamie żadnych zasad. To jest tylko tymczasowe obejście, mam nadzieję, że Apple dostarczy oficjalny sposób na zrobienie tego w przyszłej wersji beta. – JTaylor

+8

Podczas gdy to podejście uruchamia nadrzędną aplikację na iOS na pierwszym planie symulatora, dwukrotnie zweryfikowaliśmy z Apple, że ta funkcja nie będzie dostępna w sklepie App Store. Ta odpowiedź jest nieprawidłowa i nie powinna być używana. @Ipp ma poprawną odpowiedź tutaj. – cnoon

Powiązane problemy