2015-12-24 17 views
6

Tôi đã sau đây quy định tại biểu hiện của tôi:Android Sâu Liên kết với tùy chỉnh URI

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.app.package"> 
... 
    <activity 
     android:name="app.myActivity" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait"> 
     <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="www.example.com" 
       android:pathPrefix="/gizmos" 
       android:scheme="http" /> 
      <!-- note that the leading "/" is required for pathPrefix--> 
      <!-- Accepts URIs that begin with "example://gizmos”--> 
      <data 
       android:host="gizmos" 
       android:scheme="example" /> 
     </intent-filter> 
    </activity> 
... 

Và tôi đã xác định onCreate của tôi() như vậy:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Intent intent = getIntent(); 
    Uri data = intent.getData(); 
    if (data != null) { 
     Log.d("URI",data.toString());    
    } 
} 

này là phù hợp với Android tài liệu: Android Deep Linking

Vì vậy, câu hỏi là:

Làm cách nào để kiểm tra liên kết sâu URI? Theo tài liệu tôi chạy một cái gì đó giống như

adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos" com.app.package

Nhưng điều này tạo ra:

Error: Activity not started, unable to resolve Intent { act=android.intent.action.VIEW dat=example://gizmos flg=0x10000000 pkg=com.app.package }

Tôi cũng đã thử các vỏ với tên và tài liệu tham khảo của các hoạt động, các hoạt động phóng và để trống các gói . Người duy nhất tôi có thể làm việc là:

adb shell am start -W -a android.intent.action.VIEW -d " http://www.example.com/gizmos "

Nhưng ngay cả khi tôi có điều này thì không phải là nó sẽ hoạt động trong các ứng dụng khác. URI tùy chỉnh (ví dụ: // gizmos) không thể nhấp được trong các ứng dụng khác như Gmail và WhatsApp - vì vậy việc thử nghiệm trong hệ sinh thái Android cũng có vấn đề.

Câu trả lời at this stack overflow question không được chấp nhận vì nó không trả lời câu hỏi mà chỉ khuyến khích sử dụng phiên bản http: //, tôi muốn ví dụ: // scheme hoạt động.

+0

Vui lòng không cố gắng nhồi nhét nhiều câu hỏi vào một bài đăng. Ngay cả khi bạn nghĩ rằng họ có liên quan. –

Trả lời

11

ADB đang gửi ý định, nó chỉ là ứng dụng của bạn phải có ý định-bộ lọc riêng biệt khi bạn muốn nhiều loại liên kết:

<activity 
     android:name="app.myActivity" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait"> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
      <category android:name="android.intent.category.BROWSABLE" /> 
      <!-- Accepts URIs that begin with "example://gizmos”--> 
      <data 
       android:host="gizmos" 
       android:scheme="example" /> 
     </intent-filter> 
     <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="www.example.com" 
       android:pathPrefix="/gizmos" 
       android:scheme="http" /> 
      <!-- note that the leading "/" is required for pathPrefix-->     
     </intent-filter> 
    </activity> 

Sau đó lệnh ADB sau cả hai công việc:

adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos"
adb shell am start -W -a android.intent.action.VIEW -d " http://www.example.com/gizmos "

Tuy nhiên, tôi đã gặp sự cố với nhiều phần tử được thêm vào URI tùy chỉnh (ví dụ: // gizmos? Data1 = 'hello' & data2 = 'world' - '&' bị cắt)

Và rõ ràng điều này không khắc phục được sự thật là các liên kết này không thể nhấp được trong các ứng dụng khác, như WhatsApp và Gmail ... nhưng chúng có thể nhấp được trên các nền tảng khác.

+3

Cảm ơn! Đây là ** SO ** không rõ ràng trong tài liệu tham khảo của Android! – swooby

+2

Tôi đôi khi ngạc nhiên trước cách một công ty có thể nổi tiếng như vậy nhưng tài liệu của họ có thể rất mơ hồ/gây hiểu nhầm. Điều này là rất hữu ích tuy nhiên. – superuserdo

+1

Thực sự hữu ích !!! – Ajay

2

Như câu trả lời khác đề cập đến, khung công tác android yêu cầu bạn khai báo bộ lọc nhằm mục đích riêng biệt cho từng liên kết sâu mà bạn bật trong ứng dụng của mình. Đó là lý do bạn nhận được lỗi.

Ngoài ra, thay vì sử dụng adb, bạn có thể kiểm tra liên kết sâu trực tiếp trên Android sử dụng sâu của ứng dụng liên kết thử:

https://play.google.com/store/apps/details?id=com.manoj.dlt

Không cần phải đề cập đến bất kỳ tên gói hoặc tên thành phần. Chỉ cần gõ liên kết sâu thực sự và lửa.

Tôi đã làm việc với các liên kết sâu và cá nhân, tôi thấy thử nghiệm thông qua adb tốn thời gian. Do đó, tôi đã tạo ứng dụng này để kiểm tra các liên kết sâu trực tiếp và đưa nó lên cửa hàng chơi.

Các vấn đề liên quan