Cómo enviar y recibir Firebase Invites desde tu app para iOS

Requisitos previos

Firebase Invites requiere iOS 8 o una versión posterior. Puedes orientar tu app a iOS 7, pero ten en cuenta que las llamadas al SDK de Firebase Invites no funcionarán si la app no se está ejecutando en iOS 8 o una versión posterior.

Antes de comenzar

  1. Si aún no conectaste tu app al proyecto de Firebase, puedes hacerlo desde Firebase console.
  2. Si aún no habilitaste Firebase Dynamic Links, puedes hacerlo desde Firebase console. Para ello, abre la sección Dynamic Links y acepta las condiciones del servicio, si se te solicita que lo hagas. Como Firebase Invites se basa en Firebase Dynamic Links, debes habilitar Firebase Dynamic Links para usar Firebase Invites.
  3. Agrega Firebase a tu proyecto de iOS. Incluye el siguiente Pod en tu Podfile:
    pod 'Firebase/Invites'
  4. Importa el módulo de Firebase en tu subclase UIApplicationDelegate:

    Swift

    import Firebase
    

    Objective-C

    @import Firebase;
    
  5. Configura una instancia compartida de FirebaseApp, generalmente en el método application:didFinishLaunchingWithOptions: de tu aplicación:

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()
    

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
    
  6. En Xcode, edita la Info.plist de tu proyecto y agrega una propiedad con la clave NSContactsUsageDescription ("Privacy - Contacts Usage Description") y un valor que describa de qué manera tu app utiliza los datos de contactos. Por ejemplo: "MyRecipeApp utiliza tus contactos para que sea más fácil compartir recetas con tus amigos".
  7. Implementa el Acceso con Google en tu app. Los usuarios deben acceder a sus cuentas de Google para poder enviar invitaciones.

Administra invitaciones de app entrantes

Después de configurar tu app, debes habilitarla para que administre invitaciones de apps entrantes.

Cuando un usuario selecciona una invitación de app entrante en su dispositivo iOS, si el usuario aún no instaló tu app, puede decidir hacerlo desde la página correspondiente de la App Store en iTunes. Cuando el usuario abre tu app por primera vez, es importante que esta le brinde una experiencia de incorporación personalizada para aumentar la probabilidad de que se convierta en un usuario comprometido a largo plazo. Para ayudarte en esto, el SDK de Invites proporciona el vínculo directo y el ID de invitación asociados con la invitación de app que el usuario recibió.

Swift

@available(iOS 9.0, *)
func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any])
  -> Bool {
    return self.application(application, open: url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String, annotation: "")
}

func application(_ application: UIApplication,
  open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
    if let invite = Invites.handle(url, sourceApplication:sourceApplication, annotation:annotation) as? ReceivedInvite {
      let matchType =
          (invite.matchType == .weak) ? "Weak" : "Strong"
      print("Invite received from: \(sourceApplication ?? "") Deeplink: \(invite.deepLink)," +
          "Id: \(invite.inviteId), Type: \(matchType)")
      return true
    }

    return GIDSignIn.sharedInstance().handle(url, sourceApplication: sourceApplication, annotation: annotation)
}

Objective-C

- (BOOL)application:(nonnull UIApplication *)application
            openURL:(nonnull NSURL *)url
            options:(nonnull NSDictionary<NSString *, id> *)options {
  return [self application:application
                   openURL:url
         sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
                annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
}

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
  // Handle App Invite requests
  FIRReceivedInvite *invite =
      [FIRInvites handleURL:url sourceApplication:sourceApplication annotation:annotation];
  if (invite) {
    NSString *matchType =
        (invite.matchType == FIRReceivedInviteMatchTypeWeak) ? @"Weak" : @"Strong";
    NSString *message =
        [NSString stringWithFormat:@"Deep link from %@ \nInvite ID: %@\nApp URL: %@\nMatch Type:%@",
                                   sourceApplication, invite.inviteId, invite.deepLink, matchType];

    [[[UIAlertView alloc] initWithTitle:@"Deep-link Data"
                                message:message
                               delegate:nil
                      cancelButtonTitle:@"OK"
                      otherButtonTitles:nil] show];

    return YES;
  }

  return [[GIDSignIn sharedInstance] handleURL:url
                             sourceApplication:sourceApplication
                                    annotation:annotation];
}

Permite que tus usuarios envíen invitaciones de app

Ahora que tu app está lista para administrar invitaciones entrantes correctamente, es momento de que la habilites para enviar invitaciones a los contactos del usuario.

Antes de que un usuario pueda enviar invitaciones, debe acceder con su cuenta de Google.

Para enviar invitaciones, primero debes declarar que estás implementando el protocolo FIRInviteDelegate:

Swift

class ViewController: UIViewController, InviteDelegate {
  // ...

Objective-C

@interface ViewController ()<FIRInviteDelegate>

A continuación, agrega botones para Enviar invitación a tu app. Puedes agregar este botón como una opción en el menú principal o junto con contenido que admita vinculación directa, de modo que los usuarios puedan enviar contenido específico con la invitación. Consulta las recomendaciones de Firebase Invites.

Cuando los usuarios presionan el botón Enviar invitación, se abre el diálogo de la invitación:

Swift

@IBAction func inviteTapped(_ sender: AnyObject) {
  if let invite = Invites.inviteDialog() {
    invite.setInviteDelegate(self)

    // NOTE: You must have the App Store ID set in your developer console project
    // in order for invitations to successfully be sent.

    // A message hint for the dialog. Note this manifests differently depending on the
    // received invitation type. For example, in an email invite this appears as the subject.
    invite.setMessage("Try this out!\n -\(GIDSignIn.sharedInstance().currentUser.profile.name)")
    // Title for the dialog, this is what the user sees before sending the invites.
    invite.setTitle("Invites Example")
    invite.setDeepLink("app_url")
    invite.setCallToActionText("Install!")
    invite.setCustomImage("https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png")
    invite.open()
  }
}

Objective-C

- (IBAction)inviteTapped:(id)sender {
  id<FIRInviteBuilder> inviteDialog = [FIRInvites inviteDialog];
  [inviteDialog setInviteDelegate:self];

  // NOTE: You must have the App Store ID set in your developer console project
  // in order for invitations to successfully be sent.
  NSString *message =
      [NSString stringWithFormat:@"Try this out!\n -%@",
                                 [GIDSignIn sharedInstance].currentUser.profile.name];

  // A message hint for the dialog. Note this manifests differently depending on the
  // received invitation type. For example, in an email invite this appears as the subject.
  [inviteDialog setMessage:message];

  // Title for the dialog, this is what the user sees before sending the invites.
  [inviteDialog setTitle:@"Invites Example"];
  [inviteDialog setDeepLink:@"app_url"];
  [inviteDialog setCallToActionText:@"Install!"];
  [inviteDialog setCustomImage:@"https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png"];
  [inviteDialog open];
}

Personaliza la invitación

Cuando creas el diálogo de la invitación, debes especificar el título y el mensaje que se enviará. También puedes personalizar la imagen y la URL del vínculo directo que se envían en la invitación, como en el ejemplo anterior.

MétodoCanalesDescripción
setTitle Correo electrónico y SMS Obligatorio: Establece el título del diálogo de la invitación.
setMessage Correo electrónico y SMS Obligatorio: Establece el texto predeterminado de las invitaciones por SMS y el asunto predeterminado de las invitaciones por correo electrónico. El remitente puede editar este mensaje en el diálogo de la invitación. El mensaje no debe superar los 100 caracteres.
setDeepLink Correo electrónico y SMS Establece el vínculo a tu app que se envía con las invitaciones. Especifica esto para compartir contenido específico con el destinatario o para ofrecer una experiencia personalizada cuando un usuario abra tu app desde una invitación.
setCustomImage Correo electrónico Establece la URL de una imagen personalizada que se incluirá en las invitaciones por correo electrónico. La imagen debe ser cuadrada y medir, aproximadamente, 600 x 600 píxeles. La imagen no puede superar los 4,000 x 4,000 píxeles.
setCallToActionText Correo electrónico Establece el texto del llamado a la acción del botón que aparece en las invitaciones por correo electrónico. El texto no debe superar los 32 caracteres.

Si tienes una versión de tu app para Android y quieres enviar una invitación que se pueda abrir en Android y en iOS, llama a setOtherPlatformsTargetApplication:targetApplication antes de abrir la invitación. Por ejemplo:

Swift

let targetApplication = InvitesTargetApplication.init()
targetApplication.androidClientID = self.androidClientIDLabel.text
inviteBuilder.setOtherPlatformsTargetApplication(targetApplication)

Objective-C

FIRInvitesTargetApplication *targetApplication = [[FIRInvitesTargetApplication alloc] init];
targetApplication.androidClientID = self.androidClientIDLabel.text;
[inviteBuilder setOtherPlatformsTargetApplication:targetApplication];

Entonces, el método inviteTapped abre el diálogo de selección de contactos, en el cual el usuario selecciona a los contactos que invitará. Las invitaciones se envían por correo electrónico o SMS. Después de que el usuario envía la invitación, tu app recibe una devolución de llamada al método inviteFinishedWithInvitations.

Swift

func inviteFinished(withInvitations invitationIds: [String], error: Error?) {
  if let error = error {
    print("Failed: " + error.localizedDescription)
  } else {
    print("\(invitationIds.count) invites sent")
  }
}

Objective-C

- (void)inviteFinishedWithInvitations:(NSArray *)invitationIds error:(NSError *)error {
  if (error) {
    NSLog(@"%@", error.localizedDescription);
  } else {
    NSLog(@"%li invites sent", invitationIds.count);
  }
}

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.