2016-10-04 43 views
9

trên firebase documentation:căn cứ hỏa lực Android: xử lý liên kết sâu

nó nói:

Tiếp nhận liên kết sâu, hãy gọi getInvitation phương pháp

Tuy nhiên, liên kết sâu, cài đặt còn tồn tại, dường như hoạt động ngay cả khi không triển khai mã được mô tả ở đó.

Vì vậy, có thực sự cần thiết để gọi phương thức getInvitation không? nó chính xác là gì?

Trả lời

3

getInvitation() là để xử lý ý định liên kết sâu. Đó là khuyến cáo để thực hiện nó như mô tả here:

Bạn phải gọi getInvitation() trong mọi hoạt động mà có thể được đưa ra bởi liên kết, mặc dù các liên kết có thể được cung cấp từ mục đích sử dụng getIntent(). lấy dữ liệu(). Gọi getInvitation() truy xuất liên kết và xóa dữ liệu đó để dữ liệu chỉ được ứng dụng của bạn xử lý một lần.

+0

Are ** liên kết hồi ** và ** dữ liệu thanh toán bù trừ ** chức năng duy nhất của 'getInvitation()'? Tôi đã tự quản lý điều này. –

+0

Đó là những gì liên kết đề cập đến. Nếu bạn có thể tự mình xử lý thì tôi nghĩ bạn nên đi và bỏ qua chức năng này. – random

0

Tôi không tin rằng bạn phải sử dụng getInvitation(), Cá nhân tôi chỉ ghi đè 'onNewIntent' như vậy:

@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); 
    } 
} 

tôi thiết lập một handler với postDelayed để cho phép hoạt động để set- lên. Bạn không phải làm vậy.

Bạn phải có một bộ lọc ý định thiết lập như thế này

<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> 

Sau đó url động https://*****.app.goo.gl/?link=http://yourwebsite.com&al=yourappname://anything/method&apn=com.yourwebsite.yourappname nên mở trang web của bạn trên máy tính để bàn iOS vv, và các ứng dụng hoặc playstore trên Android.

Để nhận các liên kết sâu từ các tìm kiếm của Google tách khỏi các liên kết trên trang web của bạn thành các đoạn trong ứng dụng của bạn, bạn phải xác định chúng. Các phương thức handleItemId và getIdFromIntent của tôi được định nghĩa như sau.

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; 
} 

Và 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; 
} 
Các vấn đề liên quan