2017-06-01 2 views
1

J'ai implémenté la branche dans mon application native de réaction. Tous les liens de la plateforme sont configurés et je vois le paramètre dont j'ai besoin dans l'URL. Le problème que j'ai est quand l'application installe d'abord la valeur est nulle. C'est seulement après avoir installé puis revenir au lien, il reconnaît ce paramètre. Est-ce le comportement voulu? Comment est ma configuration d'appel de branchement dans un composant de chargement initial?Le paramètre de lien profond d'E/S de branche n'apparaît pas dans la réponse native natif

J'ai ajouté ceci à un componentDidMount() puisque j'utilise redux et que je voulais alerter redux de la valeur.

componentDidMount(){ 
    branch.subscribe(({params, uri, error}) => { 
     if (params && !error) { 

     if(params.coid != null){ 

      const id = params.coid 
      this.showAlertMessage(
      'BUNDLE COMPANY ID', 
      id 
     ) 
      this.props.CheckAdmin(id) 
      LocalStore.get('localID').then(localID => { 
      LocalStore.save('localID', {value: id}); 
      }) 
     } 
     }else{ 

     this.showAlertMessage(
      'BUNDLE COMPANY ID', 
      "BUNDLE COID IS NULL" 
     ) 
     this.props.IsMasterDownload() 
     } 
     this.showAlertMessage(
     'BRANCH URI', 
     uri 
    ) 
    }) 

    } 

Est-ce que branch.subscribe doit être en dehors de ma classe de composant pour fonctionner correctement?

Répondre

3

Merci d'avoir soulevé ce problème. Je suis le mainteneur actuel de ce repo, et j'ai apporté quelques changements qui devraient rendre les choses un peu plus claires.

TL; DR:

  • Mise à jour 2.0.0-beta.5 ou plus tard. Le comportement de ces arguments a légèrement changé pour être plus cohérent.
  • N'utilisez pas l'argument uri, qui est obsolète et qui sera éventuellement supprimé.
  • Recherchez le paramètre +non_branch_link à la place pour les liaisons non-Branch.
  • Utilisez les données du params avec des liens de branche. Pour les liens de branche, uri est identique à params['~referring_link'].
  • Le rappel est appelé chaque fois que l'API répond, y compris des choses comme l'initialisation, auquel cas params contiendra simplement { "+clicked_branch_link": false, "+is_first_session": false }.
  • Voir le Branch docs pour plus de détails sur le contenu de params.
  • Voir les exemples dans le repo, en particulier webview_example.
  • componentWillMount est un bon endroit pour appeler branch.subscribe.

Ce SDK avait toujours un modèle de données légèrement différent de tous les autres SDK de Branch, pour une raison ou une autre. Aucun autre SDK n'offre un paramètre uri. Toutes les informations pertinentes sont présentes dans les arguments params et error, qui sont également renvoyés par d'autres SDK (par exemple, iOS, Android, Cordova). Auparavant, le SDK RN ne transmettait pas le params si le paramètre ~id n'était pas présent. Le paramètre ~id est affecté par Branch pour identifier chaque clic unique sur un lien de branche. En particulier, il n'est pas présent pour les liens non-Branch. Ainsi, dans de nombreux cas, le rappel subscribe a été appelé avec la valeur null params. Le paramètre uri a été ajouté uniquement afin de fournir le +non_branch_link pour les liaisons non-Branch, puisque les params ont été filtrés. Ces différences ont compliqué la prise en charge, ajouté une complexité de code inutile et provoqué la confusion parmi les développeurs. dans 2.0.0-beta.5. Le paramètre uri doit maintenant être considéré comme obsolète. Son comportement devrait être inchangé, sauf dans certains cas de bord impair. Vous devez toujours consulter le params sauf si error est non nul.

Voir le Branch docs pour plus d'informations sur tous les paramètres de la branche.Lors de l'ouverture d'un lien non-Branch, le seul paramètre intéressant retourné est +non_branch_link, qui est juste l'URL non-Branch. C'est le même que le paramètre uri pour ces liens.

Le rappel subscribe est appelé chaque fois que l'API répond au SDK, ce qui inclut des éléments tels que l'initialisation, pour la liaison profonde différée. Si aucun lien n'est disponible au lancement, vous êtes toujours rappelé. Mais +clicked_branch_link est faux et +non_branch_link est absent. Ceci est cohérent avec le comportement du reste des SDK de Branch.

J'ai passé beaucoup de temps récemment sur le examples dans le repo. Ils travaillent tous. En particulier, le webview_example illustre une intégration d'application réaliste avec le routage de lien. Je vous invite à regarder comment cela fonctionne. En particulier, vous définissez un certain nombre de paramètres lorsque vous appelez createBranchUniversalObject et showShareSheet (ou getShortUrl). Ils sont renvoyés à subscribe et utilisés pour router le lien dans l'application et afficher une vue avec le contenu approprié.

À l'heure actuelle, tout fonctionne et est compatible avec le modèle de données de Branch ailleurs.

Je pense qu'il y a encore place à amélioration. En particulier, il serait intéressant de distinguer plus facilement un lien ouvert d'une réponse d'initialisation réussie. Je pense que ce serait une amélioration d'ajouter des méthodes au SDK et d'adopter une API comme le module RN Linking, par ex. branch.getInitialLink(), branch.addEventListener('open', ({params}) => { ... }), branch.addEventListener('init',() => { ... }), branch.addEventListener('error', ({error}) => { ... }). Cela arrivera probablement dans une version ultérieure comme 2.1.

+0

Merci Jimmy et désolé pour une réponse lente. Je vais essayer de changer mon appel à l'intérieur componentWillMount et gettng débarrasser de l'uri. Je n'utilisais même pas cela car j'avais juste besoin des params pour une valeur clé. J'ai également réalisé que je n'avais pas ajouté mes empreintes digitales Cert SHA256 pour activer les liens d'application. Est-ce que cela causerait aussi que cela ne fonctionne pas correctement? À votre santé. –

+0

Une autre question Jimmy, Lors de l'ajout de deux paramètres, quelle est la meilleure façon de les diviser en params. J'ai remarqué si je passe deux comme? Coid = XYZ? L = ABC Le params.coid = XYZ? L = ABC –

+0

Au-delà des spécificités de ce SDK, ma connaissance est aléatoire. Vous devriez consulter les documents de la succursale à https://dev.branch.io ou [email protected] pour plus de détails. Je ne suis pas sûr de savoir comment l'empreinte digitale SHA fonctionne avec App Links, mais il semble improbable que cela fonctionnerait parfois et pas d'autres. Je vous recommande d'utiliser des métadonnées pour vos paramètres lors de la création de liens dans l'application ou le tableau de bord. Si les params sont entièrement contextuels et ne peuvent pas être inclus dans les métadonnées du lien, je pense que vous pouvez utiliser la syntaxe habituelle du paramètre de requête URL:? Coid = XYZ & l = ABC (&, non?). –