2016-10-04 22 views
9

在火力地堡documentation火力地堡的Android:处理深层链接

它说:

要接收的深层链接,请拨打getInvitation方法

然而,深层链接,幸存的装置,即使没有实施那里描述的代码,似乎也能工作。

那么,是否真的需要调用getInvitation方法?这究竟是什么?

回答

3

getInvitation()是处理深层链接的意图。建议来实现它描述here

你必须在每一个可能被链接启动 活动调用getInvitation(),即使该链接可能使用getIntent可以从意图 ()。的getData()。调用getInvitation()将检索 链接并清除该数据,以便仅由您的应用程序处理一次。

+0

是**链接检索**和**数据清算**'getInvitation()'的唯一功能?我已经自己管理这个。 –

+0

这就是链接提到的。如果你自己可以处理它,那么我认为你应该去忽略这个功能。 – random

0

我不相信你必须使用getInvitation(),我个人只是重写“onNewIntent”,像这样:

@Override 
protected void onNewIntent(final Intent intent) { 
    super.onNewIntent(intent); 
    if (intent.getAction().equals("android.intent.action.VIEW")) { 
    new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
     handleItemId(getIdFromIntent(intent)); 
     } 
    }, 50); 
    } 
} 

我设置了一个postDelayed处理程序,以允许活动SET-向上。你不必这样做。

你必须有一个意图过滤器设置这样

<intent-filter> 
     <action android:name="android.intent.action.VIEW"/> 
     <category android:name="android.intent.category.DEFAULT"/> 
     <category android:name="android.intent.category.BROWSABLE"/> 
     <data android:host="yourwebsite.com" android:scheme="http"/> 
     <data android:host="yourwebsite.com" android:scheme="https"/> 
     <data android:host="anything" android:scheme="yourappname"/> 
    </intent-filter> 

然后动态URL https://*****.app.goo.gl/?link=http://yourwebsite.com&al=yourappname://anything/method&apn=com.yourwebsite.yourappname应该打开你的网站上桌面的iOS等,和Android上的应用程序或Play商店中。

要接收来自谷歌搜索的深层链接,该链接从您网站上的链接转换为您应用中的片段,您必须定义它们。我的handleItemId和getIdFromIntent方法定义如下。

public boolean handleItemId(int id) { 
    if (id == R.id.nav_home) { 
    fragment = new FragmentHome(); 

    } else if (id == R.id.nav_favorites) { 
    fragment = new FragmentFavoritesPager(); 

    } else if (id == R.id.nav_contact) { 
    Intent intent = new Intent(Intent.ACTION_SENDTO); 
    intent.setData(Uri.parse("mailto:[email protected]")); // only email apps should handle this 
    if (intent.resolveActivity(getPackageManager()) != null) { 
     startActivity(intent); 
    } else { 
     Toast.makeText(this, "No email app is installed", Toast.LENGTH_LONG).show(); 
    } 
    return false; 

    } else if (id == R.id.nav_settings) { 
    fragment = new FragmentSettings(); 

    } else { 
    return false; 
    } 
    new Handler().postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     getSupportFragmentManager() 
      .beginTransaction() 
      .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out) 
      .replace(R.id.content_main, fragment) 
      .commitAllowingStateLoss(); 
    } 
    },400); 
    return true; 
} 

而且getIdFromIntent

private int getIdFromIntent(Intent intent) { 
    int id = R.id.nav_home; 
    if (intent.getData() != null) { 
    List<String> segments = intent.getData().getPathSegments(); 
    if (segments.size() > 0) { 
     switch (segments.get(0)) { 
     case "favorites": 
      id = R.id.nav_favorites; 
      break; 
     case "contact": 
      id = R.id.nav_contact; 
      break; 
     case "settings": 
      id = R.id.nav_settings; 
      break; 
     } 
    } 
    } 
    return id; 
}