Share via


Grundlagen der Nachrichten-App-Erweiterung in Xamarin.iOS

In diesem Artikel wird gezeigt, wie Sie eine Nachrichten-App-Erweiterung in eine Xamarin.iOS-Lösung einschließen, die in die Nachrichten-App integriert ist und dem Benutzer neue Funktionen bietet.

Neu bei iOS 10 ist eine Nachrichten-App-Erweiterung, die sich in die Nachrichten-App integrieren lässt und Benutzer*innen neue Funktionen bietet. Die Erweiterung kann Text, Sticker, Mediendateien und interaktive Nachrichten senden.

Informationen zu Nachrichten-App-Erweiterungen

Wie bereits erwähnt, ist eine Nachrichten-App-Erweiterung in die Nachrichten-App integriert und stellt dem Benutzer neue Funktionen bereit. Die Erweiterung kann Text, Sticker, Mediendateien und interaktive Nachrichten senden. Es stehen zwei Arten von Nachrichten-App-Erweiterung zur Verfügung:

  • Aufkleberpakete – Enthält eine Sammlung von Aufklebern, die der Benutzer einer Nachricht hinzufügen kann. Aufkleberpakete können erstellt werden, ohne Code zu schreiben.
  • iMessage-App – Kann eine benutzerdefinierte Benutzeroberfläche in der Nachrichten-App zum Auswählen von Aufklebern, Eingeben von Text, einschließlich Mediendateien (mit optionalen Typkonvertierungen) und Erstellen, Bearbeiten und Senden von Interaktionsnachrichten darstellen.

Nachrichten-Apps-Erweiterungen bieten drei Standard Inhaltstypen:

  • Interaktive Nachrichten – Sind eine Art benutzerdefinierter Nachrichteninhalte, die von einer App generiert werden, wenn der Benutzer auf die Nachricht tippt, wird die App im Vordergrund gestartet.
  • Aufkleber – Werden Bilder generiert, die von der App generiert werden, die in die zwischen den Benutzern gesendeten Nachrichten aufgenommen werden können.
  • Andere unterstützte Inhalte – Die App kann Inhalte wie Fotos, Videos, Text oder Links zu anderen Inhaltstypen bereitstellen, die von der Nachrichten-App immer unterstützt wurden.

Neu bei iOS 10 enthält die Nachrichten-App jetzt einen eigenen dedizierten, integrierten App Store. Alle Apps, die Nachrichten-Apps-Erweiterungen enthalten, werden in diesem Store angezeigt und höhergestuft. Die neue Nachrichten-App-Schublade zeigt alle Apps an, die aus dem Nachrichten-App Store heruntergeladen wurden, um den Benutzern schnellen Zugriff zu ermöglichen.

Auch neu in iOS 10 hat Apple Die Inline-App-Attribution hinzugefügt, mit der der Benutzer eine App problemlos entdecken kann. Wenn beispielsweise ein Benutzer Inhalte aus einer App sendet, die der 2. Benutzer nicht installiert hat (z. B. einen Aufkleber), wird der Name der sendenden App unter dem Inhalt im Nachrichtenverlauf aufgeführt. Wenn der Benutzer auf den Namen der App tippt, wird der Nachrichten-App Store geöffnet, und die im Store ausgewählte App.

Nachrichten-Apps-Erweiterungen ähneln vorhandenen iOS-Apps, mit denen der Entwickler mit der Erstellung vertraut ist, und sie haben Zugriff auf alle Standardframeworks und Features einer iOS-Standard-App. Zum Beispiel:

  • Sie haben Zugriff auf In-App-Kauf.
  • Sie haben Zugriff auf Apple Pay.
  • Sie haben Zugriff auf Gerätehardware wie die Kamera.

Nachrichten-Apps-Erweiterungen werden nur unter iOS 10 unterstützt. Der Inhalt, den diese Erweiterungen senden, kann jedoch auf WatchOS- und macOS-Geräten angezeigt werden. Die neue Seite "Zuletzt verwendet", die watchOS 3 hinzugefügt wurde, zeigt aktuelle Aufkleber an, die vom Telefon gesendet wurden, einschließlich derjenigen von Nachrichten-Apps-Erweiterungen, und ermöglicht es dem Benutzer, diese Aufkleber von der Uhr zu senden.

Informationen zum Nachrichtenframework

Neu bei iOS 10 stellt das Nachrichtenframework die Schnittstelle zwischen der Nachrichten-Apps-Erweiterung und der Nachrichten-App auf dem iOS-Gerät des Benutzers bereit. Wenn der Benutzer eine App innerhalb der Nachrichten-App startet, kann die App anhand dieses Frameworks ermittelt werden und stellt die daten und den Kontext bereit, die zum Gestalten der Benutzeroberfläche erforderlich sind.

Sobald die App gestartet wurde, interagiert der Benutzer damit, um neue Inhalte zu erstellen, die über eine Nachricht freigegeben werden. Die App verwendet dann das Nachrichtenframework, um den neu erstellten Inhalt zur Verarbeitung in die Nachrichten-App zu übertragen.

Das Nachrichtenframework und Die Nachrichten-Apps-Erweiterungen basieren auf den bereits vorhandenen iOS-App-Erweiterungstechnologien. Weitere Informationen zu App-Erweiterungen finden Sie im Programmierhandbuch zur App-Erweiterung von Apple.

Im Gegensatz zu anderen Erweiterungspunkten, die Apple im gesamten System bereitgestellt hat, muss der Entwickler keine Host-App für ihre Nachrichten-Apps-Erweiterungen bereitstellen, da die Nachrichten-App selbst als Container fungiert. Der Entwickler hat jedoch die Möglichkeit, die Nachrichten-Apps-Erweiterung in eine neue oder vorhandene iOS-App einzugeben und zusammen mit dem Bundle zu versenden.

Wenn die Nachrichten-Apps-Erweiterungen im Bündel einer iOS-App enthalten sind, wird das Symbol der App sowohl auf dem Startbildschirm des Geräts als auch im Nachrichten-App-Drawer in der Nachrichten-App angezeigt. Wenn sie nicht in einem App-Bündel enthalten ist, wird die Nachrichten-App-Erweiterung nur in der Nachrichten-App-Schublade angezeigt.

Auch wenn die Nachrichten-Apps-Erweiterungen nicht in einem Host-App-Bündel enthalten sind, muss der Entwickler ein App-Symbol im Bündel der Nachrichten-Apps-Erweiterung bereitstellen, da dies das Symbol ist, das in anderen Teilen des Systems angezeigt wird, z. B. der Message App Drawer oder Einstellungen, für die Erweiterung.

Informationen zu Aufklebern

Apple hat Aufkleber als neue Möglichkeit für iMessage-Benutzer entwickelt, um zu kommunizieren, indem Aufkleber als jeder andere Nachrichteninhalt inline gesendet werden können oder sie an vorherige Nachrichtenblasen innerhalb der Unterhaltung angefügt werden können.

Was sind Aufkleber?

  • Sie sind Bilder, die die Nachrichten-Apps-Erweiterung bereitstellt.
  • Sie können entweder animierte oder statische Bilder sein.
  • Sie bieten eine neue Möglichkeit zum Freigeben von Bildinhalten innerhalb einer App.

Es gibt zwei Möglichkeiten zum Erstellen von Aufklebern:

  1. Eine Aufkleberpaket-Nachrichten-Apps-Erweiterungen können innerhalb von Xcode erstellt werden, ohne Code einzugeben. Alles, was erforderlich ist, sind die Ressourcen für die Aufkleber und die App-Symbole.
  2. Durch Erstellen einer standardmäßigen Nachrichten-Apps-Erweiterung, die Aufkleber aus Code über das Nachrichtenframework bereitstellt.

Erstellen von Aufkleberpaketen

Aufkleberpakete werden aus einer speziellen Vorlage innerhalb von Xcode erstellt und stellen einfach einen statischen Satz von Bildressourcen bereit, die als Aufkleber verwendet werden können. Wie oben erwähnt, benötigen sie keinen Code, der Entwickler zieht einfach Bilddateien in den Ordner "Sticker Pack" innerhalb des Stickers Asset Catalog.

Damit ein Bild in einem Aufkleberpaket enthalten ist, muss es die folgenden Anforderungen erfüllen:

  • Bilder müssen im PNG-, APNG-, GIF- oder JPEG-Format vorliegen. Apple schlägt vor, nur die PNG- und APNG-Formate zu verwenden, wenn Aufkleberressourcen bereitgestellt werden.
  • Animierte Aufkleber unterstützen nur die APNG- und GIF-Formate.
  • Aufkleberbilder sollten einen transparenten Hintergrund bereitstellen, da sie über Nachrichtenblasen in der Unterhaltung vom Benutzer platziert werden können.
  • Die einzelnen Bilddateien müssen kleiner als 500 KB sein.
  • Bilder dürfen nicht kleiner als 100 x 100 Punkt oder größer als 206 x 206 Punkt sein.

Wichtig

Aufkleberbilder sollten immer in der @3x Auflösung im Bereich von 300 x 300 bis 618 x 618 Pixeln bereitgestellt werden. Das System generiert automatisch die @2x und @1x die Versionen zur Laufzeit nach Bedarf.

Apple schlägt vor, die Aufkleberbildressourcen auf verschiedene farbige Hintergründe (z. B. Weiß, Schwarz, Rot, Gelb und mehrfarbig) und fotos zu testen, um sicherzustellen, dass sie in allen möglichen Situationen am besten aussehen.

Aufkleberpakete können Aufkleber in einer von drei verfügbaren Größen bereitstellen:

  • Klein - 100 x 100 Punkte.
  • Mittel - 136 x 136 Punkt. Dies ist die Standardgröße.
  • Groß - 206 x 206 Punkte.

Verwenden Sie den Attributes Inspector von Xcode, um die Größe für das gesamte Aufkleberpaket festzulegen und nur Bildressourcen bereitzustellen, die der angeforderten Größe entsprechen, um die besten Ergebnisse im Aufkleberbrowser innerhalb der Nachrichten-App zu erzielen.

Weitere Informationen finden Sie in der Apple-Nachrichtenreferenz.

Erstellen einer benutzerdefinierten Aufkleberumgebung

Wenn die App mehr Kontrolle oder Flexibilität erfordert, als von einem Aufkleberpaket bereitgestellt wird, kann sie eine Nachrichten-App-Erweiterung enthalten und die Aufkleber über das Nachrichtenframework für eine benutzerdefinierte Aufkleberumgebung bereitstellen.

Welche Vorteile bietet die Erstellung einer benutzerdefinierten Aufklebererfahrung?

  1. Ermöglicht der App, die Anzeige von Aufklebern für die Benutzer der App anzupassen. Um beispielsweise Aufkleber in einem anderen Format als dem Standardrasterlayout oder auf einem anderen farbigen Hintergrund darzustellen.
  2. Ermöglicht es Aufklebern, dynamisch aus Code zu erstellen, anstatt als statische Bildressourcen eingeschlossen zu werden.
  3. Ermöglicht das dynamische Herunterladen von Sticker-Bildressourcen vom Webserver des Entwicklers, ohne eine neue Version im App Store veröffentlichen zu müssen.
  4. Ermöglicht den Zugriff auf die Kamera des Geräts zum Erstellen von Aufklebern on-the-fly.
  5. Ermöglicht In-App-Käufen, damit der Benutzer weitere Aufkleber innerhalb der App erwerben kann.

Gehen Sie wie folgt vor, um eine benutzerdefinierte Aufkleberumgebung zu erstellen:

  1. Starten Sie Visual Studio für Mac.

  2. Öffnen Sie die Lösung, um eine Nachrichten-App-Erweiterung hinzuzufügen.

  3. Wählen Sie iOS-Erweiterungen>>iMessage-Erweiterung aus, und klicken Sie auf die Schaltfläche "Weiter":

    iMessage-Erweiterung auswählen

  4. Geben Sie einen Erweiterungsnamen ein, und klicken Sie auf die Schaltfläche "Weiter":

    Geben Sie einen Erweiterungsnamen ein.

  5. Klicken Sie auf die Schaltfläche "Erstellen ", um die Erweiterung zu erstellen:

    Klicken Sie auf die Schaltfläche Erstellen.

Standardmäßig wird die MessagesViewController.cs Datei der Lösung hinzugefügt. Dies ist der Standard Einstiegspunkt in die Erweiterung und erbt von der MSMessageAppViewController Klasse.

Das Nachrichtenframework stellt Klassen zum Präsentieren verfügbarer Aufkleber für den Benutzer bereit:

  • MSStickerBrowserViewController – Steuert die Ansicht, in der die Aufkleber angezeigt werden. Es entspricht auch der IMSStickerBrowserViewDataSource Schnittstelle, um die Aufkleberanzahl und den Sticker für einen bestimmten Browserindex zurückzugeben.
  • MSStickerBrowserView - Dies ist die Ansicht, in der die verfügbaren Aufkleber angezeigt werden.
  • MSStickerSize – Bestimmt die einzelnen Zellengrößen für das Raster der Aufkleber, die in der Browseransicht angezeigt werden.

Erstellen eines benutzerdefinierten Aufkleberbrowsers

Der Entwickler kann die Aufkleberoberfläche für den Benutzer weiter anpassen, indem er einen benutzerdefinierten Aufkleberbrowser (MSMessageAppBrowserViewController) in der Nachrichten-App-Erweiterung bereitstellt. Der benutzerdefinierte Aufkleber-Browser ändert die Darstellung von Aufklebern für den Benutzer, wenn er einen Aufkleber auswählt, der in den Nachrichtenstream aufgenommen werden soll.

Gehen Sie folgendermaßen vor:

  1. Klicken Sie im Projektblock mit der rechten Maustaste auf den Projektnamen der Erweiterung, und wählen Sie "Neue Datei hinzufügen>" aus...>iOS | Apple Watch>Interface Controller.

  2. Geben Sie StickerBrowserViewController den Namen ein, und klicken Sie auf die Schaltfläche "Neu":

    Geben Sie StickerBrowserViewController für den Namen ein.

  3. Öffnet die Datei StickerBrowserViewController.cs zur Bearbeitung.

Sehen Sie wie StickerBrowserViewController.cs folgt aus:

using System;
using System.Collections.Generic;
using UIKit;
using Messages;
using Foundation;

namespace MonkeyStickers
{
    public partial class StickerBrowserViewController : MSStickerBrowserViewController
    {
        #region Computed Properties
        public List<MSSticker> Stickers { get; set; } = new List<MSSticker> ();
        #endregion

        #region Constructors
        public StickerBrowserViewController (MSStickerSize stickerSize) : base (stickerSize)
        {
        }
        #endregion

        #region Private Methods
        private void CreateSticker (string assetName, string localizedDescription)
        {

            // Get path to asset
            var path = NSBundle.MainBundle.PathForResource (assetName, "png");
            if (path == null) {
                Console.WriteLine ("Couldn't create sticker {0}.", assetName);
                return;
            }

            // Build new sticker
            var stickerURL = new NSUrl (path);
            NSError error = null;
            var sticker = new MSSticker (stickerURL, localizedDescription, out error);
            if (error == null) {
                // Add to collection
                Stickers.Add (sticker);
            } else {
                // Report error
                Console.WriteLine ("Error, couldn't create sticker {0}: {1}", assetName, error);
            }
        }

        private void LoadStickers ()
        {

            // Load sticker assets from disk
            CreateSticker ("canada", "Canada Sticker");
            CreateSticker ("clouds", "Clouds Sticker");
            ...
            CreateSticker ("tree", "Tree Sticker");
        }
        #endregion

        #region Public Methods
        public void ChangeBackgroundColor (UIColor color)
        {
            StickerBrowserView.BackgroundColor = color;

        }
        #endregion

        #region Override Methods
        public override void ViewDidLoad ()
        {
            base.ViewDidLoad ();

            // Initialize
            LoadStickers ();
        }

        public override nint GetNumberOfStickers (MSStickerBrowserView stickerBrowserView)
        {
            return Stickers.Count;
        }

        public override MSSticker GetSticker (MSStickerBrowserView stickerBrowserView, nint index)
        {
            return Stickers[(int)index];
        }
        #endregion
    }
}

Sehen Sie sich den obigen Code im Detail an. Es erstellt Speicher für die Aufkleber, die von der Erweiterung bereitgestellt werden:

public List<MSSticker> Stickers { get; set; } = new List<MSSticker> ();

Und überschreibt zwei Methoden der MSStickerBrowserViewController Klasse, um Daten für den Browser aus diesem Datenspeicher bereitzustellen:

public override nint GetNumberOfStickers (MSStickerBrowserView stickerBrowserView)
{
    return Stickers.Count;
}

public override MSSticker GetSticker (MSStickerBrowserView stickerBrowserView, nint index)
{
    return Stickers[(int)index];
}

Die CreateSticker Methode ruft den Pfad einer Bildressource aus dem Bündel der Erweiterung ab und verwendet sie zum Erstellen einer neuen Instanz einer MSSticker aus dieser Ressource, die sie der Auflistung hinzufügt:

private void CreateSticker (string assetName, string localizedDescription)
{

    // Get path to asset
    var path = NSBundle.MainBundle.PathForResource (assetName, "png");
    if (path == null) {
        Console.WriteLine ("Couldn't create sticker {0}.", assetName);
        return;
    }

    // Build new sticker
    var stickerURL = new NSUrl (path);
    NSError error = null;
    var sticker = new MSSticker (stickerURL, localizedDescription, out error);
    if (error == null) {
        // Add to collection
        Stickers.Add (sticker);
    } else {
        // Report error
        Console.WriteLine ("Error, couldn't create sticker {0}: {1}", assetName, error);
    }
}

Die LoadSticker Methode wird aufgerufen ViewDidLoad , um einen Aufkleber aus der benannten Bildressource (im Bündel der App enthalten) zu erstellen und der Sammlung von Aufklebern hinzuzufügen.

Um den benutzerdefinierten Aufkleberbrowser zu implementieren, bearbeiten Sie die MessagesViewController.cs Datei, und machen Sie sie wie folgt aussehen:

using System;
using UIKit;
using Messages;

namespace MonkeyStickers
{
    public partial class MessagesViewController : MSMessagesAppViewController
    {
        #region Computed Properties
        public StickerBrowserViewController BrowserViewController { get; set;}
        #endregion

        #region Constructors
        protected ViewController (IntPtr handle) : base (handle)
        {
            // Note: this .ctor should not contain any initialization logic.
        }
        #endregion

        #region Override Methods
        public override void ViewDidLoad ()
        {
            base.ViewDidLoad ();

            // Create new browser and configure it
            BrowserViewController = new StickerBrowserViewController (MSStickerSize.Regular);
            BrowserViewController.View.Frame = View.Frame;
            BrowserViewController.ChangeBackgroundColor (UIColor.Gray);

            // Add to view
            AddChildViewController (BrowserViewController);
            BrowserViewController.DidMoveToParentViewController (this);
            View.AddSubview (BrowserViewController.View);
        }
        #endregion
    }
}

In diesem Code werden im Detail Speicher für den benutzerdefinierten Browser erstellt:

public StickerBrowserViewController BrowserViewController { get; set;}

Und in der ViewDidLoad Methode instanziiert und konfiguriert es einen neuen Browser:

// Create new browser and configure it
BrowserViewController = new StickerBrowserViewController (MSStickerSize.Regular);
BrowserViewController.View.Frame = View.Frame;
BrowserViewController.ChangeBackgroundColor (UIColor.Gray);

Anschließend wird der Browser der Ansicht hinzugefügt, um ihn anzuzeigen:

// Add to view
AddChildViewController (BrowserViewController);
BrowserViewController.DidMoveToParentViewController (this);
View.AddSubview (BrowserViewController.View);

Weitere Aufkleberanpassung

Weitere Aufkleberanpassung ist möglich, indem nur zwei Klassen in die Nachrichten-App-Erweiterung eingeschlossen werden:

  • MSStickerView
  • MSSticker

Mit den oben genannten Methoden kann die Erweiterung die Aufkleberauswahl unterstützen, die nicht auf die Standardmäßige Sticker Browser-Methode basiert. Darüber hinaus kann die Aufkleberanzeige zwischen zwei verschiedenen Ansichtsmodi gewechselt werden:

  • Kompakt – Dies ist der Standardmodus, in dem die Aufkleberansicht die untere 25 % der Nachrichtenansicht einnimmt.
  • Erweitert – Die Aufkleberansicht füllt die gesamte Nachrichtenansicht aus.

Diese Aufkleberansicht kann entweder programmgesteuert oder manuell vom Benutzer zwischen diesen Modi gewechselt werden.

Sehen Sie sich das folgende Beispiel für die Behandlung des Wechsels zwischen den beiden verschiedenen Ansichtsmodi an. Für jeden Zustand sind zwei unterschiedliche Ansichtscontroller erforderlich. Die StickerBrowserViewController Ziehpunkte der Kompaktansicht und sieht wie folgt aus:

using System;
using System.Collections.Generic;
using UIKit;
using Messages;
using Foundation;

namespace MessageExtension
{
    public partial class StickerBrowserViewController : MSStickerBrowserViewController
    {
        #region Computed Properties
        public MessagesViewController MessagesAppViewController { get; set; }
        public List<MSSticker> Stickers { get; set; } = new List<MSSticker> ();
        #endregion

        #region Constructors
        public StickerBrowserViewController (MessagesViewController messagesAppViewController, MSStickerSize stickerSize) : base (stickerSize)
        {
            // Initialize
            this.MessagesAppViewController = messagesAppViewController;
        }
        #endregion

        #region Private Methods
        private void CreateSticker (string assetName, string localizedDescription)
        {

            // Get path to asset
            var path = NSBundle.MainBundle.PathForResource (assetName, "png");
            if (path == null) {
                Console.WriteLine ("Couldn't create sticker {0}.", assetName);
                return;
            }

            // Build new sticker
            var stickerURL = new NSUrl (path);
            NSError error = null;
            var sticker = new MSSticker (stickerURL, localizedDescription, out error);
            if (error == null) {
                // Add to collection
                Stickers.Add (sticker);
            } else {
                // Report error
                Console.WriteLine ("Error, couldn't create sticker {0}: {1}", assetName, error);
            }
        }

        private void LoadStickers ()
        {

            // Load sticker assets from disk
            CreateSticker ("add", "Add New Sticker");
            CreateSticker ("canada", "Canada Sticker");
            CreateSticker ("clouds", "Clouds Sticker");
            CreateSticker ("tree", "Tree Sticker");
        }
        #endregion

        #region Public Methods
        public void ChangeBackgroundColor (UIColor color)
        {
            StickerBrowserView.BackgroundColor = color;

        }
        #endregion

        #region Override Methods
        public override void ViewDidLoad ()
        {
            base.ViewDidLoad ();

            // Initialize
            LoadStickers ();

        }

        public override nint GetNumberOfStickers (MSStickerBrowserView stickerBrowserView)
        {
            return Stickers.Count;
        }

        public override MSSticker GetSticker (MSStickerBrowserView stickerBrowserView, nint index)
        {
            // Wanting to add a new sticker?
            if (index == 0) {
                // Yes, ask controller to present add sticker interface
                MessagesAppViewController.AddNewSticker ();
                return null;
            } else {
                // No, return existing sticker
                return Stickers [(int)index];
            }
        }
        #endregion
    }
}

Die AddStickerViewController erweiterte Aufkleberansicht wird behandelt und sieht wie folgt aus:

using System;
using Foundation;
using UIKit;
using Messages;

namespace MessageExtension
{
    public class AddStickerViewController : UIViewController
    {
        #region Computed Properties
        public MessagesViewController MessagesAppViewController { get; set;}
        public MSSticker NewSticker { get; set;}
        #endregion

        #region Constructors
        public AddStickerViewController (MessagesViewController messagesAppViewController)
        {
            // Initialize
            this.MessagesAppViewController = messagesAppViewController;
        }
        #endregion

        #region Override Method
        public override void ViewDidLoad ()
        {
            base.ViewDidLoad ();

            // Build interface to create new sticker
            var cancelButton = new UIButton (UIButtonType.RoundedRect);
            cancelButton.TouchDown += (sender, e) => {
                // Cancel add new sticker
                MessagesAppViewController.CancelAddNewSticker ();
            };
            View.AddSubview (cancelButton);

            var doneButton = new UIButton (UIButtonType.RoundedRect);
            doneButton.TouchDown += (sender, e) => {
                // Add new sticker to collection
                MessagesAppViewController.AddStickerToCollection (NewSticker);
            };
            View.AddSubview (doneButton);

            ...
        }
        #endregion
    }
}

Die MessageViewController Implementierung dieser Ansichtscontroller zum Steuern des angeforderten Zustands:

using System;
using UIKit;
using Messages;

namespace MessageExtension
{
    public partial class MessagesViewController : MSMessagesAppViewController
    {
        #region Computed Properties
        public bool IsAddingSticker { get; set;}
        public StickerBrowserViewController BrowserViewController { get; set; }
        public AddStickerViewController AddStickerController { get; set;}
        #endregion

        #region Constructors
        protected MessagesViewController (IntPtr handle) : base (handle)
        {
            // Note: this .ctor should not contain any initialization logic.
        }
        #endregion

        #region Public Methods
        public void PresentStickerBrowser ()
        {
            // Is the Add sticker view being displayed?
            if (IsAddingSticker) {
                // Yes, remove it from view
                AddStickerController.RemoveFromParentViewController ();
                AddStickerController.View.RemoveFromSuperview ();
            }

            // Add to view
            AddChildViewController (BrowserViewController);
            BrowserViewController.DidMoveToParentViewController (this);
            View.AddSubview (BrowserViewController.View);

            // Save mode
            IsAddingSticker = false;
        }

        public void PresentAddSticker ()
        {
            // Is the sticker browser being displayed?
            if (!IsAddingSticker) {
                // Yes, remove it from view
                BrowserViewController.RemoveFromParentViewController ();
                BrowserViewController.View.RemoveFromSuperview ();
            }

            // Add to view
            AddChildViewController (AddStickerController);
            AddStickerController.DidMoveToParentViewController (this);
            View.AddSubview (AddStickerController.View);

            // Save mode
            IsAddingSticker = true;
        }

        public void AddNewSticker ()
        {
            // Switch to expanded view mode
            Request (MSMessagesAppPresentationStyle.Expanded);
        }

        public void CancelAddNewSticker ()
        {
            // Switch to compact view mode
            Request (MSMessagesAppPresentationStyle.Compact);
        }

        public void AddStickerToCollection (MSSticker sticker)
        {
            // Add sticker to collection
            BrowserViewController.Stickers.Add (sticker);

            // Switch to compact view mode
            Request (MSMessagesAppPresentationStyle.Compact);
        }
        #endregion

        #region Override Methods
        public override void ViewDidLoad ()
        {
            base.ViewDidLoad ();

            // Create new browser and configure it
            BrowserViewController = new StickerBrowserViewController (this, MSStickerSize.Regular);
            BrowserViewController.View.Frame = View.Frame;
            BrowserViewController.ChangeBackgroundColor (UIColor.Gray);

            // Create new Add controller and configure it as well
            AddStickerController = new AddStickerViewController (this);
            AddStickerController.View.Frame = View.Frame;

            // Initially present the sticker browser
            PresentStickerBrowser ();
        }

        public override void DidTransition (MSMessagesAppPresentationStyle presentationStyle)
        {
            base.DidTransition (presentationStyle);

            // Take action based on style
            switch (presentationStyle) {
            case MSMessagesAppPresentationStyle.Compact:
                PresentStickerBrowser ();
                break;
            case MSMessagesAppPresentationStyle.Expanded:
                PresentAddSticker ();
                break;
            }
        }
        #endregion
    }
}

Wenn der Benutzer fordert, der verfügbaren Sammlung einen neuen Aufkleber hinzuzufügen, wird ein neuer AddStickerViewController Controller angezeigt, und die Aufkleberansicht wechselt in die erweiterte Ansicht:

// Switch to expanded view mode
Request (MSMessagesAppPresentationStyle.Expanded);

Wenn der Benutzer einen hinzuzufügenden Aufkleber auswählt, wird er zu seiner verfügbaren Sammlung hinzugefügt, und die Kompaktansicht wird angefordert:

public void AddStickerToCollection (MSSticker sticker)
{
    // Add sticker to collection
    BrowserViewController.Stickers.Add (sticker);

    // Switch to compact view mode
    Request (MSMessagesAppPresentationStyle.Compact);
}

Die DidTransition Methode wird überschrieben, um den Wechsel zwischen den beiden Modi zu behandeln:

public override void DidTransition (MSMessagesAppPresentationStyle presentationStyle)
{
    base.DidTransition (presentationStyle);

    // Take action based on style
    switch (presentationStyle) {
    case MSMessagesAppPresentationStyle.Compact:
        PresentStickerBrowser ();
        break;
    case MSMessagesAppPresentationStyle.Expanded:
        PresentAddSticker ();
        break;
    }
}

Zusammenfassung

Dieser Artikel enthält eine Nachrichten-App-Erweiterung in einer Xamarin.iOS-Lösung, die in die Nachrichten-App integriert und dem Benutzer neue Funktionen präsentiert. Es wurde mit der Erweiterung behandelt, um Text, Aufkleber, Mediendateien und interaktive Nachrichten zu senden.