2016-03-15 121 views
0

我正在嘗試創建一個環境,以便通過電子郵件打開iPhone應用程序。如果我使用Facebook的託管服務作爲appLink(Facebook AppLink Hosting API),只要我點擊它在Facebook移動應用內生成的鏈接,我就可以成功打開該應用。但是,如果我嘗試從另一個移動應用程序(例如Notes或Mail)中單擊相同的鏈接,它只會重定向到Facebook,而不會重定向到我的應用程序。此外,Facebook AppLink Hosting API只允許您爲單個應用程序創建鏈接。我希望能夠自動打開我的付費版應用程序或應用程序的免費版本(按此順序),具體取決於用戶在其移動設備上具有的應用程序。appLinks無法通過電子郵件打開iPhone應用程序

因此,我遵循在(applinks.org)上找到的關於如何在我自己的服務器上設置元標記以執行打開AppLink的任務的描述。所以,我有一個網頁與下面的HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=utf-8"> 
<title>MyApp</title> 
<meta property="al:iphone:url" content="myAppLinkScheme://Home"> 
<meta property="al:iphone:app_name" content="MyApp"> 
<meta property="al:iphone:app_store_id" content="471147787"> 
<meta property="al:iphone:url" content="myAppLinkLiteScheme://Home"> 
<meta property="al:iphone:app_name" content="MyApp Lite"> 
<meta property="al:iphone:app_store_id" content="518829102"> 
<meta property="al:ipad:url" content="myAppLinkLiteScheme://Home"> 
<meta property="al:ipad:app_name" content="MyApp Lite"> 
<meta property="al:ipad:app_store_id" content="518829102"> 
<meta property="al:web:should_fallback" content="false"> 
</head> 
<body>Redirecting...</body> 
</html> 

然後我使用Facebook的託管的應用鏈接工具創建的應用鏈接。通過使用他們的Open Graph Object Debugger,我能夠刮掉使用他們的工具創建的AppLink的內容。 Facebook元標籤與我的元標籤非常相似,但有一些差異。正如我之前提到的,第一個區別是您只能使用Facebook工具指定一個應用程序,因此只有一個iPhone url,app_name和app_store_id meta標記。另外兩個差異如下標籤[我代替我APP_ID與....以下標籤]:

<meta property="fb:app_id" content="28...........64"> 
<meta http-equiv="refresh" content="0;url=https://apps.facebook.com/28...........64/?fb_source=mobile"> 

有明顯的「刷新」元標記apps.facebook.com發生重定向。我不知道那裏發生了什麼,但即使我把所有這些標籤放在我的網頁頭標籤中,結果也是一樣的。如果您單擊來自移動應用程序(例如郵件或便箋)的鏈接,則只會打開我的網頁。重定向不會發生在我的應用程序或Facebook上。

請注意,我還爲每個應用程序的info.plists和appDelegates添加了所需的方案信息。也就是說,在我的info.plist的URL類型中,我添加了com.myApp.myAppLinkScheme的標識符和myAppLinkScheme的一個方案。對於info.plist的精簡版本也做了類似的補充。此外,我添加了應用程序的付費和免費版本都與我的appDelegate必要的修改:

-(BOOL)application:(UIApplication *)application 
      openURL:(NSURL *)url 
sourceApplication:(NSString *)sourceApplication 
     annotation:(id)annotation { 

    if ([[url scheme] isEqualToString:@"myAppLinkScheme"]) { 
     return YES; 
    } 
    ... 
} 

所以,我明顯失去了一些東西。需要什麼額外的實施來設置我的服務器,以便當用戶點擊從iPhone的郵件應用程序指向我的服務器的鏈接時,它們被重定向到我的應用程序?

回答

1

這些<meta>標籤受到應用程序(如Facebook)的尊重,這些應用程序已實施到Applinks協議並知道尋找它們。 Mail和Safari等其他應用完全忽略它們,而是打開後備網址。

當您使用Mobile Hosting API時,該回退URL已註冊以打開Facebook應用程序。不幸的是Facebook以後不會轉發給您自己的應用程序。

當您使用自己的服務器時,回退只是您網站上的一個URL ......它沒有註冊任何內容。然而。

要解決此問題,您需要以某種不依賴於Facebook的方式執行鏈接到應用重定向。有幾個選項:

  1. 在你的服務器是這樣實現一個JavaScript重定向:

    setTimeout(function() { 
        window.location = "https://itunes.apple.com/path/to/your/app/"; 
    }, 25); 
    
    // If "yourapp://" is registered, the user will see a dialog 
    // asking if want to open your app. If they agree, your app will 
    // launch immediately and the timer won't fire. 
    // If not installed, you'll get an ugly "Cannot Open Page" 
    // dialogue and the App Store will launch when the timer expires. 
    
    window.location = "yourapp://"; 
    

    顯然,這不是一個理想的解決方案,它有討厭的邊緣案件 ,最明顯的是用戶會看到他們沒有安裝你的應用程序的「無法打開頁面」錯誤。直到最近,纔有可能以合理的用戶友好的方式解決這個問題,通過智能地重定向到App Store這個腳本的細微版本。可悲的是,蘋果intentionally broke that與iOS 9.2更新。

  2. Enable Universal Links。蘋果知道這是一個令人討厭的問題,並試圖幫助。通用鏈接可讓您使用您網站上的網頁的正常網址(處理應用程序未安裝的回退問題),該網址會被您的手機攔截並直接發送到您的應用程序(如果已安裝)。不幸的是,通用鏈接僅適用於iOS 9+,並且不需要,但在a lot of apps(包括諷刺意味的是,Facebook)內部打開時仍然有效。

最好的解決方案是上述方法的組合:通用鏈接和Applinks支持的任何地方,智能JavaScript重定向作爲後備。這是相當多的處理,所以最好的選擇可能是免費的服務,如Branch.io(全面披露:我與團隊合作)照顧所有的技術方面。

相關問題