簡體   English   中英

從另一個應用程序打開一個應用程序-“此應用程序不允許查詢方案”

[英]Opening an app from another app - “This app is not allowed to query for scheme”

我無法找到有關如何從我當前的自定義應用程序打開另一個自定義應用程序的清晰、准確的指南。

我不斷收到此錯誤:

此應用程序不允許查詢方案myScheme

我通過執行以下操作設法使其正常工作:

在下面的示例中,主應用程序是主應用程序,我想在其中單擊一個按鈕並打開另一個應用程序。 此示例中的另一個應用程序稱為 app2。

兩個應用程序必須屬於同一方案,以防止上述“不允許”錯誤。

在下面的示例中,該方案稱為 myapps,但它可以是您在“信息”選項卡中設置的任何內容(如下所述)。

在應用程序 2 中:

  1. 單擊您的應用程序目標(單擊左側層次結構中的應用程序名稱,然后單擊目標下的應用程序名稱)。

  2. 單擊信息選項卡並向下滾動到 URL 類型。

  3. 單擊箭頭展開 URL 類型,單擊 + 添加新條目。

  4. 在標識符字段中輸入一個唯一標識符(我只是使用了該應用程序的包 ID...例如 com.mycompany.app2。

  5. 在 URL Schemes 字段中,輸入 URL 方案的名稱。 在此示例中,我們將其稱為 myapps,因此我們將 myapps 輸入到該字段中。 這個方案名稱需要在主應用程序中設置。 對於您想要打開的每個附加應用程序,您需要設置不同的方案名稱,然后還將方案名稱添加到主應用程序中。

在主應用程序中:

  1. 重復第 1 步到第 5 步 - 唯一的更改將是第 4 步,因為唯一標識符會有所不同,如果您要設置多個應用程序,請執行第 5 步。

  2. 設置一個按鈕。

  3. 將按鈕連接到如下操作:

     @IBAction func pressOpenAnotherApp(_ sender: Any) { openApp(appURL: "myapps://com.companyname.app2" }
  4. 設置 openApp 功能:

     func openApp(appURL: String) { let openApp = URL(string: appURL)! if UIApplication.shared.canOpenURL(appURL) { UIApplication.shared.open(appURL, options: [:], completionHandler: { (success) in print("Open App: \\(appURL)") print("Status: \\(success)") }) } }

這對我有用,雖然信息只是通過我自己的反復試驗,所以它可能不是 100% 准確,但它有效!

您是否在嘗試實際打開 URL 之前使用canOpenURL (如果沒有安裝第二個應用程序,您應該這樣做。) 該文檔詳細介紹了在 Info.plist 中包含LSApplicationQueriesSchemes的要求。

您有 2 個應用程序來測試此問題。

  1. App_B (從 App_A 打開的應用程序)
  2. App_A (App啟動直接打開App_B)

步驟:App_BApp_B 中選擇設置方案 Url(您要重定向打開的名稱以檢查此 App_B 是否已安裝)

在此處輸入圖片說明

Ok 我們設置的方案 Url 完成。 然后轉到您的 App_A(您當前的應用程序)

步驟:App_A

1.創建你的項目

2.create func open scheme url

override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        openApp_B_installed()

        
    }

func openApp_B_installed(){
        //LSApplicationQueriesSchemes in your Info.plist.
        let appName = "App_B"
        let appScheme = "\(appName)://"
        let appUrl = URL(string: appScheme)

        
        if let url = appUrl,
            UIApplication.shared.canOpenURL(url) {
            print("App installed")
            if #available(iOS 10.0, *) {
                UIApplication.shared.open(url, options: [:], completionHandler: {
                    (success) in
                    if (success)
                    {
                        print("OPENED \(url): \(success)")
                    }
                    else
                    {
                        print("FAILED to open \(url)")
                    }
                })
            } else {
                // Fallback on earlier versions
                UIApplication.shared.openURL(url)
            }
        }else {
            print("App not installed")
        }
        
    }
  1. 在信息 plist 中添加 LSApplicationQueriesSchemes。 在此處輸入圖片說明

在此處輸入圖片說明

恭喜你完成了。 您嘗試通過安裝 App_A 、 App_B 並安裝 App_A 進行測試,您只能在openApp_B_installed()調試

我希望它有助於澄清和解決這個主題的問題。 謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM