繁体   English   中英

如何让我的 SwiftUI 应用程序显示在 IOS 照片共享表上?

[英]How can I get my SwiftUI app to show on the IOS Photos Share Sheet?

我正在尝试让我的 SwiftUI 应用程序列在 IOS 照片库的共享表中,以便用户可以直接打开带有此图像的应用程序。

示例:像 facebook、WhatsApp 和 Instagram 这样的应用确实出现在共享表上,我希望我的应用也出现在该列表中。

当从“文件”打开但不在照片库上工作时,我成功地在图像的共享表上显示了我的应用程序。

我在我的应用程序的 Info.plist 中添加了这些代码行

    <key>CFBundleDocumentTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeExtensions</key>
            <array>
                <string>myapp image</string>
            </array>
            <key>CFBundleTypeName</key>
            <string>imageData</string>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
            <key>LSHandlerRank</key>
            <string>Alternate</string>
            <key>LSItemContentTypes</key>
            <array>
                <string>public.png</string>
                <string>public.jpeg</string>
                <string>public.heic</string>
            </array>
        </dict>
    </array>


<key>UTImportedTypeDeclarations</key>
    <array>
        <dict>
            <key>UTTypeConformsTo</key>
            <array>
                <string>public.image</string>
            </array>
            <key>UTTypeDescription</key>
            <string>PNG image</string>
            <key>UTTypeIconFiles</key>
            <array/>
            <key>UTTypeIdentifier</key>
            <string>public.png</string>
            <key>UTTypeTagSpecification</key>
            <dict>
                <key>public.filename-extension</key>
                <array>
                    <string>png</string>
                </array>
            </dict>
        </dict>
        <dict>
            <key>UTTypeConformsTo</key>
            <array>
                <string>public.image</string>
                <string>public.data</string>
            </array>
            <key>UTTypeDescription</key>
            <string>JPEG image</string>
            <key>UTTypeIconFile</key>
            <string>public.jpeg.icns</string>
            <key>UTTypeIconFiles</key>
            <array/>
            <key>UTTypeIdentifier</key>
            <string>public.jpeg</string>
            <key>UTTypeTagSpecification</key>
            <dict>
                <key>public.filename-extension</key>
                <array>
                    <string>jpeg</string>
                    <string>jpg</string>
                </array>
            </dict>
        </dict>
        <dict>
            <key>UTTypeConformsTo</key>
            <array>
                <string>public.image</string>
                <string>public.data</string>
            </array>
            <key>UTTypeDescription</key>
            <string>HEIC image</string>
            <key>UTTypeIconFiles</key>
            <array/>
            <key>UTTypeIdentifier</key>
            <string>public.heif-standard</string>
            <key>UTTypeTagSpecification</key>
            <dict>
                <key>public.filename-extension</key>
                <array>
                    <string>heic</string>
                </array>
            </dict>
        </dict>
    </array>

来自 Apple 的文档

为确保主机应用程序仅在用户选择了您支持的类型的数据时才提供您的扩展程序,请将 NSExtensionActivationRule 键添加到您的扩展程序的 Info.plist 属性列表文件中

如果您不支持特定数据类型,请使用 0 作为相应键的值或从 NSExtensionActivationRule 字典中删除该键

要从照片共享表添加应用程序,您需要添加

<key>NSExtensionAttributes</key>
    <dict>
        <key>NSExtensionActivationRule</key>
        <dict>
            <key>NSExtensionActivationSupportsImageWithMaxCount</key>
            <integer>1</integer>
        </dict>
    </dict>

概述

使用 iOS共享表,用户可以在共享链接、图像、视频或文件等内容时,从建议列表中立即启动您的消息传递应用程序。 共享表建议与用户经常交互的应用程序中的人进行对话,并根据用户最喜欢的应用程序和对话随时间更新其建议。 当用户在 iOS 16 或更高版本中共享图像时,共享表会优先考虑与它在图像中识别的人的对话。

如何实施:

在您的应用的共享扩展中支持建议

祝你好运!

要让您的 SwiftUI 应用程序显示在 iOS 照片共享表中,您需要执行以下操作:

将“照片”权利添加到应用程序的权利文件中。 这将允许您的应用程序访问用户的照片库。

在您的应用中实施 UIActivityViewController class。 这个 class 提供了一个标准界面,用于与其他应用程序共享内容,包括照片应用程序。

在您的 SwiftUI 视图中,添加将触发共享表的按钮或其他控件。 当用户点击此控件时,以模态方式呈现 UIActivityViewController 的实例。

在 UIActivityViewController 的初始化程序中,将 activityItems 参数设置为您要共享的项目的数组(例如 UIImage 或 URL 对象)。

在 UIActivityViewController 的初始化程序中,如果要在共享表中包含自定义操作,请将 applicationActivities 参数设置为自定义 UIActivity 对象数组。

当用户点击共享按钮时,以模态方式呈现 UIActivityViewController。

struct ContentView: View {
var body: some View {
    Button(action: {
        // Load the image that the user wants to share
        let image = UIImage(named: "example.jpg")!
        
        // Create an instance of UIActivityViewController
        let activityViewController = UIActivityViewController(activityItems: [image], applicationActivities: nil)
        
        // Present the share sheet modally
        UIApplication.shared.windows.first?.rootViewController?.present(activityViewController, animated: true, completion: nil)
    }) {
        Text("Share")
    }
}

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM