40 votes

Comment intégrer l'application avec l'application Contacts d'iOS ?

J'essaie d'intégrer une application de messagerie à l'application Contacts d'iOS, afin que les utilisateurs puissent envoyer des messages via l'application directement à partir de Contacts. Ce sujet a été traité dans Session 240 de la WWDC 2016 mais apparemment certains détails ont été omis.

En suivant l'exemple de la WWDC, je l'ai fait :

  • Ajout du type d'activité à l'interface de l'application Info.plist :

    <key>NSUserActivityTypes</key>
    <array>
            <string>INSendMessageIntent</string>
    </array>
  • Mis en œuvre application(_:continue:restorationHandler:) dans mon délégué d'application.

  • Création et don d'une interaction

    let activity = NSUserActivity(activityType: "com.example.message")  
    activity.title = "Send CB Test Message"  
    activity.expirationDate = Date.distantFuture  
    
    let recipient = INPerson( /* recipient with an email address in my Contacts database */ )  
    let sender = INPerson( /* me */ )        
    
    let intent = INSendMessageIntent(recipients: [recipient], content: nil, groupName: nil, serviceName: "CB Test Chat", sender: sender)  
    
    let response = INSendMessageIntentResponse(code: .success, userActivity: activity)
    let interaction = INInteraction(intent: intent, response: response)  
    interaction.direction = .outgoing  
    interaction.donate { (error) in  
        print("Donated")  
        if let error = error {  
            print("Donate error: \(error)")  
        }  
    }  

Este en quelque sorte travaux. L'application apparaît comme une option sur la carte d'un seul destinataire dans les contacts. Si vous tapez dessus dans les contacts, vous lancez mon application avec un message d'avertissement. NSUserActivity . C'est bien, mais ce n'est pas suffisant.

La session WWDC a utilisé WhatsApp comme exemple. WhatsApp apparaît comme une option sur todo de mes contacts, même ceux qui n'ont pas de compte WhatsApp. Je pensais que WhatsApp avait peut-être créé et donné des interactions pour tout le monde. Mais si je crée un nouveau contact alors que WhatsApp n'est pas en cours d'exécution, c'est immédiatement une option sur ce contact. J'ai expérimenté un peu, en fixant l'argument du destinataire à nil ou à un tableau vide, mais cela n'a eu aucun effet.

Alors qu'est-ce que je rate ici ? Je suis proche, peut-être ? Mais il semble que le don d'interactions ne soit pas ce dont j'ai réellement besoin.

Mise à jour, en réponse à @Mark : Clarifié l'utilisation de activity . J'ai essayé en utilisant response (qui utilise activity ) et avec une valeur nulle pour response mais aucun des deux n'a fonctionné.

0 votes

Avez-vous essayé de mettre le destinataire et l'expéditeur à zéro ?

0 votes

Où utilisez-vous activity ? On dirait que vous le créez juste en haut et que vous n'en faites rien.

0 votes

@Mark Bonne prise, merci. La question est mise à jour.

1voto

Ron Jones Jr Points 36

Il suffit d'utiliser UIActivityViewController. Vous pouvez l'instancier avec du texte ou n'importe quel objet. Vous pouvez également exclure tous les autres types de messages si c'est tout ce que vous voulez.

let objectsToShare = [textToShare, otherObject] as [Any]
let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)

//New Excluded Activities Code
activityVC.excludedActivityTypes = [UIActivityType.addToReadingList]
activityVC.popoverPresentationController?.sourceView = sender as? UIView
present(activityVC, animated: true, completion: nil)

0 votes

Ce n'est pas ce que j'essaie de faire. La session WWDC a décrit un moyen de faire apparaître des applications tierces comme options de téléphone ou de message dans l'application Contacts. Lorsque quelqu'un utilise Contacts, une application tierce y apparaîtrait. Je n'essaie pas de partager les données de mon application, j'essaie de faire en sorte que quelqu'un puisse lancer un message dans mon application à partir de Contacts.

1voto

Tom Harrington Points 17226

J'ai posé la question lors de la WWDC 2019 et on m'a répondu que ce type de don massif ne fonctionne que pour les applications VOIP, pas pour les applications de messagerie. Le code dans cette question fonctionnerait en théorie pour VOIP-- peut-être ou peut-être pas exactement comme présenté. Je n'ai pas essayé parce que je ne travaille pas sur le bon type d'application.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X