web-dev-qa-db-fra.com

Implémentation de récompenses de parrainage dans Flutter

Je voudrais mettre en place un système de parrainage dans mon application, afin que les utilisateurs puissent inviter leurs amis par e-mail/numéro de téléphone, etc. (selon ce qui est le plus simple) et lorsqu'il sera confirmé que l'invité a installé l'application, il récompensera l'invitation d'origine expéditeur avec, disons, un mois sans bannières publicitaires.

La seule référence que je peux trouver en ligne est celle-ci: https://pub.dev/packages/firebase_dynamic_links#-readme-tab-

Je ne sais pas si c'est ce que je recherche et malheureusement, car il a été créé par l'équipe Flutter, il offre exactement 0 explications sur la façon de mettre en œuvre tout cela, car ils s'attendent en quelque sorte à ce que vous soyez déjà un professionnel à part entière - codeur de temps, capable de remplir tous les blancs pour vous-même.

Est-ce le bon plugin pour ce que je recherche? Existe-t-il de meilleures ressources?

Éditer

En descendant le chemin des liens dynamiques de Firebase. Le premier obstacle auquel je suis arrivé est qu'il me fallait posséder un domaine, que je pouvais créer les URL des liens dynamiques. J'ai donc enregistré un domaine la nuit dernière et l'ai configuré comme requis par Firebase pour le faire vérifier et le connecter au Projet Firebase (il vous guide à travers cela, et tout semble fonctionner correctement, il se peut que vous deviez donner à votre hôte DNS le temps de refléter le TXT et un enregistrement change ce processus nécessite).

Alors maintenant, j'ai un domaine vierge et vérifié appelé example.com

Dans Firebase maintenant, sous le projet que j'ai créé, sur le côté gauche se trouve un bouton appelé Dynamic Links. Cela nécessitera que example.com soit vérifié par les enregistrements A que vous aviez saisis précédemment, mais une fois vérifié, il vous permettra de créer un nouveau lien dynamique.

Il y a 5 étapes ici:

Étape 1) Il vous propose un lien URL court. Dans mon cas: example.com/Gd7W. J'ai accepté cela et j'ai frappé ensuite.

Étape 2) Configurez votre lien dynamique. Il demande une URL Deep Link et un nom de lien dynamique. Dans mon cas, j'ai utilisé example.com/apps/refer_a_friend et vous pouvez donner à Dynamic Link le nom de votre choix. Je viens d'appeler le mien "Parrainer un ami". Frappez ensuite.

Étape 3) Définissez le comportement du lien pour iOS. Je viens de le laisser comme "lien profond ouvert dans le navigateur"

Étape 4) Définissez le comportement du lien pour Android. Je viens de le laisser comme "lien profond ouvert dans le navigateur"

Étape 5) Suivi de campagne, tags sociaux et options avancées. Il ne semble pas que ce truc soit important à ce stade, pas pour ce que ce post nécessite, ce qui fait simplement fonctionner la chose. Ces informations sont destinées à l'analyse et au suivi de votre promotion une fois qu'elle fonctionne. Vous pouvez revenir et le modifier plus tard.

Ainsi, à l'étape 2, l'URL Deep Link que j'ai référencée n'existe pas réellement. Je ne sais pas si c'est censé le faire. Si je suis censé créer cette page sur mon site Web, mais si oui, que dois-je mettre sur cette page? Mes pensées actuelles sont que je devrais créer une redirection sur mon site à partir de cette adresse vers l'URL du Google Play Store pour l'application. J'ai essayé ceci mais il ne redirige pas.

Ensuite, revenons à l'exemple d'application (et ici je fais référence à l'exemple sur lequel nous travaillons dans les commentaires ci-dessous qui provient d'ici: https://github.com/flutter/plugins/tree/master/packages/firebase_dynamic_links/example ).

Cette section est ce que je pense que nous devons examiner, car elle doit être modifiée pour s'adapter à vos propres liens et adresses à partir de vos étapes précédentes:

final DynamicLinkParameters parameters = DynamicLinkParameters(
  uriPrefix: 'https://cx4k7.app.goo.gl',
  link: Uri.parse('https://dynamic.link.example/helloworld'),
  androidParameters: AndroidParameters(
    packageName: 'io.flutter.plugins.firebasedynamiclinksexample',
    minimumVersion: 0,
  ),
  dynamicLinkParametersOptions: DynamicLinkParametersOptions(
    shortDynamicLinkPathLength: ShortDynamicLinkPathLength.short,
  ),
  iosParameters: IosParameters(
    bundleId: 'com.google.FirebaseCppDynamicLinksTestApp.dev',
    minimumVersion: '0',
  ),
);

J'ai changé cette section de code pour essayer de faire correspondre mon travail ci-dessus, donc mis à jour à ceci:

final DynamicLinkParameters parameters = DynamicLinkParameters(
  uriPrefix: 'https://example.com/Gd7W',
  link: Uri.parse('https://example.com/apps/refer_a_friend'),
  androidParameters: AndroidParameters(
    packageName: 'company01.appname', //The appID of my app on the store
    minimumVersion: 0,
  ),
  dynamicLinkParametersOptions: DynamicLinkParametersOptions(
    shortDynamicLinkPathLength: ShortDynamicLinkPathLength.short,
  ),
  iosParameters: IosParameters(
    bundleId: 'company01.appname', //The appID of my app on the store
    minimumVersion: '0',
  ),
);

Lorsque j'exécute l'application et que je clique sur le bouton Obtenir un lien court, l'erreur suivante apparaît dans les journaux:

PlatformException(short_link_error, 400: Your project does not own Dynamic Links domain: https://example.com

Ce dont je ne suis pas sûr, c'est l'erreur correcte, car dans la console Firebase, ce domaine est vérifié et actuellement connecté. Cela semble bien fonctionner. Je me demande si le vrai problème est que mon lien profond ne fait vraiment rien à ce stade, et comme je l'ai mentionné, je ne suis pas entièrement sûr de ce qu'il devrait faire.

Modifier 2

Juste pour ajouter, lorsque je clique sur le bouton Obtenir un lien long, il semble en fait renvoyer quelque chose, une URL extrêmement longue qui apparaît comme quelque chose comme:

https://example.com/Gd7W?amv=0&apn=company01.appname&ibi=company01.appname&imv=0&link=https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Dcompany01.appname%26hl%3Den

Ce qui semble être tous les composants que j'ai spécifiés à divers points, mais peut-être incorrectement. Cela ressemble à un progrès en quelque sorte!

Modifier 3

J'ai parcouru tous les exemples que je peux trouver. Aucun d'eux ne me dit quelle devrait être l'URL du lien dynamique, comment la créer, où elle est censée pointer ou quoi en faire. Cela semble être le lien manquant pour que cela fonctionne.

Quelles autres choses puis-je essayer de configurer cela?

Modifier 4

Je sais que beaucoup de gens ont lu ce fil, donc j'aimerais pouvoir vous donner à tous un exemple de travail. Je n'ai pas reçu suffisamment d'aide pour cela, donc je ne l'ai jamais fait fonctionner. J'ai dû supprimer complètement les références de mon application afin de pouvoir respecter le délai.

7
Bisclavret

Voilà comment je l'ai fait fonctionner:

  1. Créez votre projet dans la console Firebase.
  2. Dans le panneau de gauche, choisissez "Liens dynamiques"
  3. Cliquez sur "Commencer"
  4. Entrez un domaine comme votrenom.page.link
  5. Cliquez sur "Terminer"
  6. Dans le panneau de gauche, cliquez sur "Paramètres du projet"
  7. Ajoutez vos Android et iOS comme décrit ici: https://firebase.google.com/docs/flutter/setup
  8. Pour que les liens dynamiques fonctionnent dans iOS, vous devez effectuer certaines étapes supplémentaires comme décrit ici: https://www.youtube.com/watch?v=sFPo296OQqk&feature=youtu.be&t=2m40s

Pour créer un lien dynamique, j'ai utilisé ce code:

String link = Constants.REFERENCE_BASE_URL + referenceId; // it can be any url, it does not have to be an existing one
final DynamicLinkParameters parameters = DynamicLinkParameters(
      uriPrefix: 'https://myappname.page.link', // uri prefix used for Dynamic Links in Firebase Console
      link: Uri.parse(link),
      androidParameters: AndroidParameters(
        packageName: 'com.example.myappname', // package name for your app
        minimumVersion: 0,
      ),
      iosParameters: IosParameters(bundleId: 'com.example.myappname'), // bundle ID for your app
    );
final ShortDynamicLink shortDynamicLink =
        await parameters.buildShortLink();

Pour recevoir un lien dynamique, j'ai utilisé ce code dans le fichier main.Dart:

@override
  void initState() {
  super.initState();
  initDynamicLinks();
}

void initDynamicLinks() async {
  final PendingDynamicLinkData data =
    await FirebaseDynamicLinks.instance.getInitialLink();
  final Uri deepLink = data?.link;

  if (deepLink != null) {
    Navigator.pushNamed(context, deepLink.path);
  }

  FirebaseDynamicLinks.instance.onLink(
    onSuccess: (PendingDynamicLinkData dynamicLink) async {
      final Uri deepLink = dynamicLink?.link;

      if (deepLink != null) {
        Navigator.pushNamed(context, deepLink.path);
      }
    }, 
    onError: (OnLinkErrorException e) async {
      print('onLinkError');
      print(e.message);
    });
}
0
Olga