Gibt es eine Möglichkeit festzustellen, ob der Benutzer die Airdrop-Anfrage akzeptiert oder ablehnt?

9

Also, ich habe die Airdrop-Funktion, aber ich brauche verschiedene Dinge, die passieren, wenn der Benutzer auf "Accept" drückt und wenn der Benutzer die Abwurf-Anfrage ablehnt.

Derzeit werden dieselben Aktionen ausgeführt, unabhängig davon, ob der Benutzer die Abwurfanforderung akzeptiert oder ablehnt.

Ich benutze

%Vor%

mit dieser Signatur:

%Vor%

Das Problem ist keiner dieser Parameter, die ich verwenden kann. Abgeschlossen gibt immer "true" zurück, wenn der Benutzer eine Auswahl trifft und "retributeItems" null ist.

Was kann ich tun oder tun, um festzustellen, ob der Benutzer die Airdrop-Anfrage abgelehnt hat?

Dies ist für eine Xamarin.iOS-App, aber Antworten in Swift / native iOS sind auch in Ordnung.

Ähnliches SO Frage ohne Antwort: UIActivityViewController Airdrop - Überprüfen Sie den Status, wenn "gesendet" oder "abgelehnt"

    
Euridice01 03.08.2017, 02:42
quelle

1 Antwort

3

Hm, okay, es sieht so aus, als ob ein Blick in die Kristallkugel unvermeidlich ist, um das zu beantworten.

Ich habe es auf iOS 10.3.3 ausprobiert und tatsächlich gibt es keinen Unterschied im Verhalten dieser Methode, unabhängig davon, ob der Airdrop vom anderen Gerät akzeptiert wurde oder abgelehnt wurde.

Offenbar bedeutet der completed boolean in HandleActivityViewControllerCompletion bisher: "Die Daten wurden einer ausgewählten Aktivität übergeben" oder "Die Daten wurden keiner Aktivität übergeben". Es entspricht, ob die Schaltfläche unter dem Freigabeblatt "Fertig" oder "Abbrechen" sagt. Leider setzt die Airdrop-Aktivität diese Schaltfläche auf "Fertig", auch wenn der Drop abgelehnt wurde, und das macht Sinn, weil es "etwas getan hat".

Ich denke, das Problem (gestalterisch) liegt in der Tatsache, dass Aktivitäten (z. B. benutzerdefinierte) das gesamte UIActivityViewController abweisen, wenn sie activityDidFinish(_:) aufrufen. Die AidropActivity ist offensichtlich dadurch besonders, dass es überhaupt nicht zu tun scheint , es zeigt nur einen "Abgelehnt" Indikator unter dem Icon, wenn die Verbindung durchgeht, aber die andere Seite, gut, nimmt ab. Plus es ändert die Schaltfläche des Blattes.

Außerdem ist die gesamte Operation asynchron. Für mich sieht es so aus, als ob die Airdrop-Aktivität ihre Funktion perform() oder prepare(withActivityItems:) aufruft, eine Remoteverbindung asynchron startet und die Schaltfläche sofort auf "Done" setzt, während diese ausgeführt wird (ich sehe für andere Aktivitäten nicht einmal einen Weg tu das, aber ich habe es nicht versucht). Sie können sogar auf Fertig drücken, bevor die andere Seite akzeptiert oder abgelehnt hat, wodurch die Übertragung nicht abgebrochen wird. Die Aktivität wird sogar benachrichtigt (wenn das Blatt noch nicht mit "Fertig" geschlossen wurde), um das Symbol zu aktualisieren.

Alles in allem scheint es besondere Privilegien zu haben, was sinnvoll ist, da die gesamte Airdrop-Funktionalität etwas Besonderes ist: Sie läuft im Hintergrund. Die Aktivität übergibt diese Daten einfach und sobald dies geschehen ist, wird sie selbst ausgeführt (unabhängig vom Ergebnis).

Natürlich stimme ich zu, dass dies nicht ausreicht, aber wenn ich dies ändere, müsste Apple wahrscheinlich die API ändern. Es wäre also eine Feature-Anfrage für Sie, ich bezweifle stark, dass es eine (AppStore-konforme) Workaround gibt, an die ich nicht gedacht habe ...

    
Gero 08.08.2017, 15:11
quelle

Tags und Links