打开活动而不显示UIActivityViewController

时间:2016-10-16 19:40:15

标签: ios iphone swift uiwebview url-scheme

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

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

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

Here's a GIF showing it

enter image description here

以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)
        }
    
  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!")!))
    
  4. 所有这些解决方案都打开了另一个应用程序 - 我想仍然留在我的应用程序中。

    知道怎么做到这一点?非常感谢帮助:))

3 个答案:

答案 0 :(得分:5)

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

<强>第一 您需要决定在其他应用上分享什么

第二名:您需要找出应用所使用的网址,

instagram的示例 - &gt; &#34;的Instagram://用户的用户名= your_username&#34;

第三:现在是流程背后的逻辑

让我说我想展示facebook,twitter,slack和instagram,

让我们设置包含相关网址的字典:

["facebook":"facebook://blablabla", "twitter":"twitter://blabla", "slack":"slack://blabla", "instagram":"instagram://blabla"]

您还需要持有APP的图标(本地或服务器/ firebase /云) - 稍后会在您的滚动视图(水平收集视图或您决定使用的内容)上显示 < / p>

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
    }

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

UIApplication.shared.open(instagramUrl!)

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

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

答案 1 :(得分:0)

简短:那是不可能的。

每个应用程序都在自己的“游乐场”内运行,而应用程序则完全关注设备。

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

但一般情况下,互联网不了解彼此。

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

但是,使用越狱的iPhone可以 ,但我不知道。

答案 2 :(得分:0)

Yodel:他们已经制作了自己的自定义视图,并且他们选择了一些常见的应用程序,例如whatsapp,snapchat,messenger等,这些应用程序通常使用“canOpenUrl”检查每个应用程序是否可用。用户的手机。如果可用,则显示其图标。当用户点击它时,它将使用“openUrl”打开给定的应用程序。

在这里,在yodel中你可以看到,它无法获取所有可用的共享应用程序,它只能预定义他们定义的修复应用程序。对于其他应用程序,他们在最后添加了“更多按钮”,单击此按钮将打开UIActivityViewController。