web-dev-qa-db-fra.com

Le lien profond de la succursale n'ouvre pas l'application

J'ai essayé (sans succès) d'utiliser Branch pour implémenter un lien profond dans notre application iOS. L'URL de la branche redirige directement vers l'App Store et n'essaie jamais d'ouvrir l'application. J'ai dû louper quelque chose.

Ce que j'ai fait:

  1. SDK de branche inclus (CocoaPods) Ajouté branch_key vers la liste des demandes
  2. Schéma d'URL ajouté aux types d'URL dans la liste des applications
  3. ActivéeAssociated Domains dans le projet et l'ID d'application dans la console du développeur.
  4. Garanti que le fichier de droits est inclus dans la génération.

  5. Gestionnaire de liens profonds enregistré dans AppDelegate

Tableau de bord: Paramètres -> Paramètres de lien:

  1. "Toujours essayer d'ouvrir l'application" est coché
  2. "IOS URI Scheme" est défini sur le schéma d'URI personnalisé de l'application.
  3. "Activer les liens universels" est coché.
  4. Bundle Identifier & Apple App Prefix sont tous deux définis correctement.

    Dans le tableau de bord de la succursale, sous l'onglet "Marketing", j'ai créé un seul lien. Je m'envoie ce lien par e-mail et je l'ouvre sur l'appareil (Mail.app). Safari s'ouvre alors l'App Store s'ouvre comme si l'application n'était pas installée.

Ni application:openURL:sourceApplication:annotation ni application:continueUserActivity:restorationHandler sont appelés.

Méthodes AppDelegate:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    let branch: Branch = Branch.getInstance()
    branch.initSessionWithLaunchOptions(launchOptions, andRegisterDeepLinkHandler: { params, error in
        if (error == nil) {
            // params are the deep linked params associated with the link that the user clicked -> was re-directed to this app
            // params will be empty if no data found
            // ... insert custom logic here ...
            NSLog("params: %@", params.description)
        }
    })
    return true
}

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)
}

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
    // pass the url to the handle deep link call
    Branch.getInstance().handleDeepLink(url);

    // do other deep link routing for the Facebook SDK, Pinterest SDK, etc
    return true
}

Suis-je en train de manquer une étape de configuration? Est-ce parce que l'application est installée via le débogage Xcode et non via l'App Store? Je m'attends à voir les méthodes de délégué d'application appelées, mais elles ne le sont pas.

25
Nick

Il semble que l'application doit être installée via App Store/Test Flight/Ad Hoc ou l'application ne sera pas considérée comme installée.

J'ai installé l'application sur mon appareil à l'aide d'une disposition Ad Hoc et tout fonctionne.

13
Nick

Pour moi, le lien a fonctionné même si j'ai installé la connexion sans distribution Adhoc. Puis un jour, il a cessé de fonctionner. C'est parce que j'ai cliqué sur le lien vers bnc dans l'application.

La solution pour cela était facile - il suffit d'appuyer longuement sur le lien. Une option affiche "Ouvrir dans l'application". Cliquez dessus et le lien est géré par l'application. La prochaine fois, le lien fonctionnera comme prévu, même sans appui long, car Safari se souvient que c'est le comportement par défaut.

11
kdeo

J'ai également eu le même problème, mais ma solution est différente de la vôtre.

Remarque: Nous pouvons ouvrir l'application en mode débogage, (je l'ai fait, comme le souligne Alex Bauer dans le commentaire ci-dessus section).

Dans .plist J'ai ajouté deux clés différentes, l'une est live et l'autre est test (simultanément), avec les paramètres de configuration mentionnés ci-dessus.

Le domaine des liens profonds que j'utilisais était celui-ci. bnc.lt. J'ai envoyé un mail à l'équipe de support de Branch Io concernant mon problème, puis j'ai reçu la réponse suivante '

La raison pour laquelle vous rencontrez des problèmes est que vous êtes toujours sur notre héritage bnc.lt domaine de liaison. Ce domaine de liaison a été progressivement supprimé au cours de la dernière année. Le développement et les fonctionnalités se sont arrêtés depuis un certain temps au profit de notre nouveau domaine de liens (app.link). Pour résoudre vos problèmes et faire fonctionner correctement votre validateur AASA, vous devrez changer votre domaine de liens de bnc.lt en app.link sur votre tableau de bord de succursale ( https://dashboard.branch.io/settings/link ). Une fois cette modification effectuée, vous devrez mettre à jour votre application pour accepter le nouveau domaine de lien app.link ainsi que votre ancien domaine de lien bnc.lt. https://Gist.github.com/ethanneff/a2a70d1b3518c638701c28b1bd374e8

Veuillez visiter le lien ci-dessus, c'est très utile.

J'espère que cela résoudra votre problème, Happy Branching :)

1
Nasir

J'ai eu le même problème - certaines des réponses ici sont datées, je vais donc essayer de fournir une mise à jour:

La solution pour cela était facile - il suffit d'appuyer longuement sur le lien. Une option affiche "Ouvrir dans l'application".

Cela a disparu dans iOS 11, je pense que si vous ne testez pas dans iOS 10, ce n'est pas une option.

Il semble que l'application doit être installée via App Store/Test Flight/Ad Hoc ou l'application ne sera pas considérée comme installée.

Comme Alex l'a souligné dans les commentaires, ce n'est pas exact. Les liens de branche fonctionnent lorsque l'application est installée via Xcode.

Pour moi, le problème était une sorte de problème de mise en cache sur mon appareil. J'ai plusieurs schémas Debug & Release, chacun ayant sa propre clé de branche et ses propres liens. Certains comment ils se sont mélangés et les liens ne s'ouvriraient pas dans un seul schéma. J'ai pu résoudre ce problème en forçant le redémarrage de l'appareil.

0
DoesData