2016-05-22 1 views
2

Voici la situation: si je clique sur l'un des liens que j'ai avec les clés/valeurs personnalisées qui lui sont associées, mon rappel de initSessionWithLaunchOptions:andRegisterDeepLinkHandler est déclenché, mais ' Les paramètres ne contiennent que la clé/les valeurs personnalisées dans le cas où l'application est nouvellement ouverte à partir du lien. Dans le cas où l'application fonctionnait déjà en arrière-plan et que je clique sur le lien, le rappel est appelé mais aucun paramètre n'est présent. Cela fonctionnait il y a quelques semaines et semble maintenant cesser de fonctionner. J'ai essayé de mettre à jour vers iOS SDK 0.12.1 aussi, mais pas de chance pour le moment. Pour contourner le problème, j'essaie de faire une séquence d'appels différée à Branch.getInstance().getLatestReferringParams() après que l'application soit active et parfois j'obtiens les paramètres à partir de là, mais ce n'est pas déterministe, parfois cela prend 2 secondes, parfois 10 secondes , parfois jamais. @AlexBauer Voici les parties du délégué de l'application. BTW, je n'ai pas l'intégration de Facebook dans l'application:Le gestionnaire de liens profonds Branch.io n'est pas appelé avec les métadonnées appropriées

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

    let branch: Branch = Branch.getInstance() 
    branch.initSessionWithLaunchOptions(launchOptions, andRegisterDeepLinkHandler: { params, error in 
     if (error == nil) { 
      print(params) 
      self.tryInviteFlow(params) 
     } else { 
      print(error.localizedDescription) 
     } 
    }) 
} 

func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool { 
    // pass the url to the handle deep link call 
    return Branch.getInstance().continueUserActivity(userActivity); 
} 
+0

Alex avec Branch.io ici: c'est vraiment bizarre! Pourrions-nous voir les sections pertinentes de votre AppDelegate et un exemple d'un lien qui ne fonctionne pas correctement? –

+0

Aussi, par hasard, utilisez-vous le SDK Facebook? Nous avons un cas de bord connu avec cela en ce moment, mais il existe une solution de contournement –

+0

@AlexBauer mis à jour avec le code du délégué de l'application – vorterixe

Répondre

0

Voici une amorce de dépannage rapide pour les questions où les liens de la Direction fonctionnent correctement à partir du démarrage à froid mais pas lorsque l'application devient actif après avoir été backgrounded .. .

Lorsqu'une application est ouverte à partir d'un lien de Direction:

  • Si l'application est lancée à froid (il n'a pas été en arrière-plan), le point d'entrée est didFinishLaunchingWithOptions
  • Si l'application a été je n l'arrière-plan et est en cours d'ouverture par Universal Linking (ce sera le cas si l'appareil est en cours d'exécution iOS 9.2+), le point d'entrée sera la fonction continueUserActivity
  • Si l'application est en cours d'ouverture par l'URI Scheme (ceci être le cas si le dispositif est en cours d'exécution de pré-iOS 9 et peut être le cas pour les versions de iOS 9 jusqu'à 9,2), le point d'entrée sera la fonction de openURL

le même rappel d'initialisation de la direction générale qui est définie dans didFinishLaunchingWithOptions est également appelé par le code de branche qui est inséré dans les fonctions openURL et continueUserActivity:

  • Dans openURL, voici: Branch.getInstance(). HandleDeepLink (url);
  • En continueUserActivity c'est: Branch.getInstance() continue (userActivity)

Si ces fonctions de la Direction ne sont pas appelés, le rappel d'initialisation de branche qui reçoit des paramètres de liaison ne serait pas appelé lors de la reprise de l'application et un lien. paramètres ne seraient donc pas disponibles.

Même lorsque ces fonctions sont appelées, d'autres codes dans les fonctions openURL et continueUserActivity peuvent empêcher l'atteinte du code de dérivation. Si vous avez d'autres codes dans ces chemins de code, vérifiez que les fonctions de la Direction générale appropriées sont en effet appelés en testant avec un ensemble de points d'arrêt sur la fonction soit de la succursale ou une ligne de code dans le rappel init. Un autre scénario potentiel pouvant entraîner des problèmes de démarrage à chaud mais pas de démarrage à froid serait lorsque le code qui lit les paramètres de branche est appelé en dehors du rappel d'initialisation de la branche et avant que ce rappel ne soit terminé. Si l'application est assez occupé dans didFinishLaunchingWithOptions, le rappel init peut être retardé suffisamment longtemps pour que le rappel d'initialisation complète avant que les paramètres sont vérifiés. Plus tard, lorsque l'application reprend, il peut y avoir moins cela se produise dans l'application et le code qui vérifie les paramètres peuvent être vérifiés avant le rappel d'initialisation est terminée. Ce n'est pas un scénario probable, mais cela peut arriver.Pour éviter cette situation de type "condition de concurrence", vérifiez uniquement les paramètres de liaison de branche dans le rappel init ou après avoir reçu une notification qui a été configurée pour signaler que le rappel init est en cours (vous pouvez voir un exemple de utiliser les notifications de cette manière dans le projet TestBed-Swift inclus avec le SDK, ici: https://github.com/BranchMetrics/ios-branch-deep-linking/tree/master/Branch-TestBed-Swift).