2015年5月23日 星期六

Android 開發 (八十九) facebook deeplink

相信有在開發app的大家,在facebook 上使用deeplink時,常常會遇到改版後就功能不正常的問題,由於最近我也遇到了類似的問題,所以就索性研究了facebook 的 document

deeplink 就是利用一個特定的連結,http://ted/123
然後假設user點擊該連結,如果該user有安裝 app則會開啟我的app
如果user沒有安裝app就會前往googleplay

今天要來介紹如何達到facebook 的 deeplink

目前facebook 有提供兩種 deeplink 的方式
第一種是你有特定的網站,特定的展示頁面
第二種是你沒有特定的網站,你只想create特定的連結

第一種是你有特定的網站,特定的展示頁面

例如下面的網站
http://tw.91mai.com/SalePage/Index/754680
這是一個銷售商品的頁面,我希望user在手機前往該頁面時會導向我手機版相對應的頁面
這時候我就可以使用第一種方法

方法其實很簡單,你只需要在網頁上加上 facebook 指定的meta即可

<head>
   
    <meta property="al:android:url" content="com.mypackage://story/1234">
    <meta property="al:android:package" content="com.mypackage">
    <meta property="al:android:app_name" content="myappName">
    <meta property="og:title" content="title" />
    <meta property="og:type" content="website" />
    
</head>
其中url 為 app要處理的資料,利用該資料就可以知道該user是在哪個頁面,我們就可以將app導向特定的頁面

package name就是app的 package name 這一個一定要跟app相同,否則會不work
app_name經過我的測試,隨便寫都可以
og:title 和 og:type 似乎是 必填欄位,如果沒特定需求就照著填就好了
更多相關的設定可以參考 http://applinks.org/documentation/


接著只要在app內加入這樣的程式碼就可以囉
<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="com.mypackage" />
    </intent-filter>
</activity>

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(this); 
    ...
    Uri targetUrl =
      AppLinks.getTargetUrlFromInboundIntent(this, getIntent());
    if (targetUrl != null) {
        Log.i("Activity", "App Link Target URL: " + targetUrl.toString());
    }
}
targetUrl就是特定的網址,我們就可以利用該url判斷應該導到app的哪個頁面


第二種是你沒有特定的網站,你只想create特定的連結

首先根據facebook 文件
你可以將你需要的參數填入,
其中最重要的是  url  你想帶入app的網址
package 你要開啟的app
curl https://graph.facebook.com/app/app_link_hosts \
-F access_token="APP_ACCESS_TOKEN" \
-F name="Android App Link Object Example" \
-F android=' [
    {
      "url" : "sharesample://story/1234",
      "package" : "com.facebook.samples.sharesample",
      "app_name" : "ShareSample",
    },
  ]' \
-F web=' {
    "should_fallback" : false,
  }'
接著你會得到一組id
{"id":"643402985734299"}
接著在利用下方網址 將上面的id 帶入
curl -G https://graph.facebook.com/643402985734299 \-d access_token="APP_ACCESS_TOKEN" \
-d fields=canonical_url \
-d pretty=true
接著會得到一組網址
{
   "canonical_url": "https://fb.me/643402985734299",
   "id": "643402985734299"
}
這個網址就是我們創造出來的網址,我們可以將這個網址貼到facebook上,只要有人點擊該link 有裝app 就會前往我們的app,沒有app的就會被導向googleplay

當然app還是要依照第一種方法做設定,這樣才app才可以攔截到該url,並且導到我們希望的頁面





1 則留言:

  1. 你好,想问这一行“meta property="al:android:url" content="com.mypackage://story/1234" ” 的content的参数怎样取得呢?我该怎样有"com.mypackage://story/1234" 这种路径呢?谢谢你

    回覆刪除