2015年1月7日 星期三

Android 開發(七十九) How to handle Deeplinking in Android (Facebook, Native Browser)


前陣子facebook改版,導致我們的deeplinking的功能無法使用, 當時有想出一個暫時的解法,不過這幾天facebook再度改版,之前的做法又不能用了,這是只好花點時間來看文件找解法,最後有找到一些相關的解決方法,在這邊分享給各位


facebook deeplinking

關於facebook deeplinking 在最近一次改版之後,假設沒有按照facebook官方文件設定的話,都會出現粉絲頁無法載入的問題,所以我們只好依照官方文件實作了

<head>
    ...
    <meta property="al:android:url" content="sharesample://story/1234">
    <meta property="al:android:package" content="com.facebook.samples.sharesample">
    <meta property="al:android:app_name" content="ShareSample">
    ...
</head>

在html的header加入上面這些meta即可,
基本上我覺得主要是看al:android:url 裡面的參數
其他兩個似乎沒什麼用處(for now)

如上範例,在app的activity裡面就必須要有對應的code

<activity android:name=".MainActivity"
    android:label="@string/app_name" >
    ...
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="sharesample" />
    </intent-filter>
</activity>

基本上這樣實作之後facebook導頁就不會有問題了.....
but....內建的browser還是不會work啊怎麼辦??


Native Browser

在google 文件的深處,有一個關於deep linking文件裡面有教我們該如何做相關的導頁動作

<a href="intent://gizmos#Intent;scheme=example;package=com.example.android;end;">example://gizmos</a>
只要點擊網頁中的超連結就可以開啟監聽特定scheme的app了

but......deeplink就是希望user點擊完某特定連結之後就可以直接開啟app啊!!!
怎麼能夠讓user再點完一次連結之後再點令一次連結呢?

相信有做過實驗的人都知道使用 window.location 和  setTimeout
在內建瀏覽器是不work的,那.......該怎麼辦?

<meta http-equiv="refresh" content="5;url=intent://gizmos#Intent;scheme=example;package=com.example.android;end;/>




將上面的meta加到header裡就可以完成自動導頁的功能囉!!!

沒有留言:

張貼留言