打开活动而不显示UIActivityViewController

Mor*_*len 12 iphone url-scheme uiwebview ios swift

我希望能够在scrollView中拥有社交图标,在单击时,其功能与在呈现UIActivityViewController后单击它们时的功能相同.我不想呈现UIActivityViewController.

我知道它应该是不可能的,但是一个名为Yodel的应用程序会这样做(或类似的东西),我想做同样的事情.

点击Yodel中的图标与UIActivityViewController中的图标完全相同,所以它们似乎以某种方式将它放在容器视图中(?)

这是一个展示它的GIF

在此输入图像描述

以Whatsapp为例,我尝试了以下内容:

  1. 使用带有URL方案的Whatsapp API https://www.whatsapp.com/faq/en/iphone/23559013

        var whatsappURL = NSURL(string: "whatsapp://send?text=Hello%2C%20World!")!
        if UIApplication.sharedApplication().canOpenURL(whatsappURL) {
            UIApplication.sharedApplication().openURL(whatsappURL)
        }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用UIActivityViewController,但我希望它们都在scrollView中,如上图所示.

  3. 使用UIWebView打开URL Scheme,希望它能保留在UIWebView中.

    var whatsappURL = NSURL(string: "whatsapp://send?text=Hello%2C%20World!")!
    if UIApplication.sharedApplication().canOpenURL(whatsappURL) {
        UIApplication.sharedApplication().openURL(whatsappURL)
    }
    
    self.view.addSubview(webview)
    webview.loadRequest(NSURLRequest(URL: NSURL(string: "whatsapp://send?text=Hello%2C%20World!")!))
    
    Run Code Online (Sandbox Code Playgroud)

所有这些解决方案都打开了另一个应用程序 - 我想继续留在我的应用程序中.

知道怎么做到这一点?帮助将不胜感激:)

Dek*_*man 5

实际上我做的完全一样,但是这个解决方案还需要您实现辅助服务器以继续支持AppStore上弹出的新应用程序(无需每次需要/想要在列表中添加/删除新应用程序时更新您的应用程序)

第一: 你需要决定你要在其他应用上分享什么

第二:你需要找出应用程序使用的URL方案,

instagram的例子 - >"instagram:// user?username = your_username"

第三:现在是这个过程背后的逻辑

假设我想展示facebook,twitter,slack和instagram,

让我们用相关的URL设置字典:

["facebook":"facebook://blablabla", "twitter":"twitter://blabla", "slack":"slack://blabla", "instagram":"instagram://blabla"]
Run Code Online (Sandbox Code Playgroud)

您还需要保留APP的图标(本地或服务器/ firebase /云) - 稍后在滚动视图中显示(horizo​​ntaly collectionview或您决定使用的内容)

4rd:你需要检查设备上是否安装了这些应用程序:

所以只需循环你的应用程序数组/字典(或者你决定保留你的信息并检查这样的可用性:

let instagramHooks = "instagram://user?username=your_username"
let instagramUrl = URL(string: instagramHooks)
if UIApplication.shared.canOpenURL(instagramUrl! as URL)
{
 //The app are installed you can show her
 } else {
       //The app doesn't installed -> don't show it on the list
    }
Run Code Online (Sandbox Code Playgroud)

之后你只需要将他们的图标放到UICollectionView/UIScrollView上,当用户点击图标你就可以打开那个方案:

UIApplication.shared.open(instagramUrl!)
Run Code Online (Sandbox Code Playgroud)

关于目标应用程序将如何显示对话框(如UIActivityViewController操作或实际打开应用程序我现在不用),但我相信你可以在这里找到帮助你的人

你了解我的步骤,如果没有,你可以与我联系以获得更多解释


Dav*_*eek 0

简而言之:\xe2\x80\x99s 是不可能的。

\n\n

每个应用程序都在自己的“游乐场”内运行,并且应用程序获得设备的全部焦点。

\n\n

我假设用户重新创建了这些应用程序的界面并从 API 中获取了信息。例如,我们从 Whatsapp API 获取内容并重新创建 UI,以使其感觉就像我们在 Whatsapp 中一样。但您不应该这样做,因为您可能会与侵犯版权发生冲突。

\n\n

但一般来说,应用程序不\xe2\x80\x99彼此了解。

\n\n

正如您所知,运行第 3 方应用程序的唯一可能性是 URL 方案。如果您想像在应用程序中一样在应用程序中运行应用程序UIWebView,则需要模拟整个 iOS。太不可能了。

\n\n

不过,越狱的 iPhone或许可以实现这一点,但我对此一无所知。

\n