Το App Link είναι ένας μηχανισμός Android (Android 6.0+) που ανοίγει αυτόματα συνδέσμους ιστού στην εγκατεστημένη εφαρμογή, παρακάμπτοντας το παράθυρο διαλόγου επιλογής. Ο όρος εισήχθη από την Google το 2015 μαζί με το Android 6.0 Marshmallow. Σύμφωνα με το Android Developers, το App Link χρησιμοποιεί τα Digital Asset Links — κρυπτογραφική επαλήθευση μέσω ενός αρχείου στον διακομιστή, που επιβεβαιώνει ότι ο τομέας ανήκει στον προγραμματιστή της εφαρμογής.
Κύρια σημεία
App Link (Android App Link) — είναι ένας τυπικός σύνδεσμος HTTPS που όταν γίνεται κλικ σε μια συσκευή Android ανοίγει αυτόματα την εγκατεστημένη εφαρμογή χωρίς να εμφανίζει το τυπικό παράθυρο διαλόγου επιλογής μεταξύ προγράμματος περιήγησης και εφαρμογής. Η Google εισήγαγε το App Link στο Android 6.0 (API 23) ως λύση στο πρόβλημα του “παραθύρου διαλόγου επιλογής” που μείωνε τη μετατροπή deep link λόγω ενός επιπλέον κλικ και σύγχυσης του χρήστη.
Η βασική καινοτομία: επαλήθευση. Το Android ελέγχει εάν ο τομέας ανήκει πραγματικά στον προγραμματιστή της εφαρμογής μέσω του Digital Asset Links API. Το Google Play Store ελέγχει το App Link κατά τη δημοσίευση και μπορεί να απορρίψει την ενημέρωση εάν η επαλήθευση αποτύχει. Αυτό καθιστά το App Link ασφαλέστερο από το Custom URL Scheme: καμία άλλη εφαρμογή δεν μπορεί να υποκλέψει τον σύνδεσμο προς τον τομέα σας.
Digital Asset Links — είναι ένα ανοιχτό πρωτόκολλο που η Google χρησιμοποιεί όχι μόνο για το App Link, αλλά και για τη σύνδεση ιστοτόπων με εφαρμογές στα αποτελέσματα αναζήτησης, το Google Assistant και το Smart Lock for Passwords. Το πρωτόκολλο βασίζεται σε κρυπτογραφική επαλήθευση: στο assetlinks.json καθορίζεται το αποτύπωμα SHA256 του πιστοποιητικού υπογραφής της εφαρμογής, το οποίο αποκλείει την παραποίηση.
Η διαδικασία λειτουργίας του App Link αποτελείται από τρία στάδια: επαλήθευση Digital Asset Links, επεξεργασία μέσω Intent Filter και αυτόματη ανακατεύθυνση. Κάθε στάδιο είναι υποχρεωτικό. Εάν η επαλήθευση αποτύχει, το Android εμφανίζει το παράθυρο διαλόγου επιλογής — ένα τέτοιο deep link λειτουργεί σαν κανονικό, αλλά χωρίς το πλεονέκτημα της αυτόματης ανακατεύθυνσης.
Asset Links — αρχείο JSON που τοποθετείται στον διακομιστή στη διεύθυνση https://domain/.well-known/assetlinks.json. Το αρχείο περιέχει μια σειρά από αντικείμενα με πεδία: relation (πίνακας συμβολοσειρών που περιγράφουν τον τύπο σχέσης), target (αντικείμενο με namespace και package_name της εφαρμογής, καθώς και sha256_cert_fingerprints — πίνακας αποτυπωμάτων SHA256 του πιστοποιητικού υπογραφής).
// assetlinks.json — ελάχιστη διαμόρφωση App Link
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.app",
"sha256_cert_fingerprints": [
"14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:AD:A4:C5:AD:6B:01:14:79:6B:CB:12:6B:21:39:6F:EA"
]
}
}]
Αποτύπωμα SHA256 προκύπτει από το πιστοποιητικό με το οποίο υπογράφεται η εφαρμογή. Για τη μεταγλώττιση debug χρησιμοποιείται το τυπικό πιστοποιητικό debug Android, για release — το πιστοποιητικό από το Google Play Console ή το δικό σας πιστοποιητικό. Σημαντικό: κατά την αλλαγή του πιστοποιητικού υπογραφής (π.χ. κατά τη μετάβαση στο App Signing by Google Play) πρέπει να ενημερώσετε το assetlinks.json στον διακομιστή, διαφορετικά το App Link θα σταματήσει να λειτουργεί.
Android ελέγχει το App Link στο πρώτο κλικ σε έναν σύνδεσμο. Το σύστημα φορτώνει το assetlinks.json από τον διακομιστή, συγκρίνει το package_name και το αποτύπωμα SHA256 με το πιστοποιητικό της εγκατεστημένης εφαρμογής. Εάν τα δεδομένα ταιριάζουν, το Android επισημαίνει το Intent Filter ως επαληθευμένο και όλοι οι επόμενοι σύνδεσμοι προς αυτόν τον τομέα ανοίγουν αυτόματα, χωρίς παράθυρο διαλόγου.
// AndroidManifest.xml — Intent Filter για App Link
<activity
android:name=".ui.ProductActivity"
android:exported="true">
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="example.com"
android:pathPrefix="/product" />
</intent-filter>
</activity>
autoVerify="true" — το υποχρεωτικό χαρακτηριστικό που δίνει εντολή στο Android να ελέγξει το assetlinks.json. Χωρίς αυτό το χαρακτηριστικό, το Intent Filter δεν θα επαληθευτεί και το App Link δεν θα ενεργοποιηθεί. Το Android υποστηρίζει πολλαπλά Intent Filter σε ένα Activity — για διαφορετικούς κεντρικούς υπολογιστές. Το σύστημα ελέγχει κάθε κεντρικό υπολογιστή ξεχωριστά. Η επαλήθευση εκτελείται ασύγχρονα και μπορεί να διαρκέσει έως 20 δευτερόλεπτα κατά την πρώτη μετάβαση.
Μετά από επιτυχή επαλήθευση, το Android ανοίγει αυτόματα την εφαρμογή όταν γίνεται κλικ σε οποιονδήποτε σύνδεσμο που ταιριάζει με το επαληθευμένο Intent Filter. Ο χρήστης δεν βλέπει το παράθυρο διαλόγου επιλογής — η εφαρμογή ανοίγει αμέσως. Εάν η εφαρμογή δεν είναι εγκατεστημένη, ο σύνδεσμος ανοίγει στο πρόγραμμα περιήγησης (σαν κανονική ιστοσελίδα). Αυτή είναι η ιδανική εμπειρία χρήστη: απρόσκοπτη μετάβαση χωρίς περιττές ενέργειες.
Σημαντικό: η αυτόματη ανακατεύθυνση λειτουργεί μόνο για το σχήμα HTTPS. Το App Link δεν υποστηρίζει HTTP (μη ασφαλές πρωτόκολλο). Εάν ο χρήστης ανοίξει χειροκίνητα έναν σύνδεσμο HTTP (π.χ. από SMS), το Android δεν εκτελεί επαλήθευση και εμφανίζει το παράθυρο διαλόγου επιλογής. Συνιστάται η χρήση HTTPS για όλους τους συνδέσμους που οδηγούν στην εφαρμογή και η ρύθμιση ανακατεύθυνσης HTTP → HTTPS στον διακομιστή.
Το App Link είναι η εξέλιξη του Deep Link στο Android, όχι αντικατάσταση. Η διαφορά μεταξύ τους είναι θεμελιώδης. Κανονικό Deep Link (Custom URL Scheme) λειτουργεί μέσω Intent Filter με προσαρμοσμένο σχήμα (myapp://) και χωρίς autoVerify. Το Android δεν ελέγχει εάν η εφαρμογή σχετίζεται πραγματικά με αυτό το σχήμα — οποιαδήποτε εφαρμογή μπορεί να καταχωρήσει το myapp:// και να υποκλέψει συνδέσμους.
App Link λύνει τρία προβλήματα του Deep Link. Πρώτον: ασφάλεια — η επαλήθευση μέσω Digital Asset Links αποκλείει την υποκλοπή συνδέσμων. Δεύτερον: εμπειρία χρήστη — η απουσία παραθύρου διαλόγου επιλογής αυξάνει τη μετατροπή στην ενέργεια-στόχο κατά 20–40%. Τρίτον: ευρετηρίαση — το Google ευρετηριάζει τους συνδέσμους HTTPS του App Link και μπορεί να τους εμφανίζει στα αποτελέσματα αναζήτησης ως συνδέσμους προς περιεχόμενο εντός της εφαρμογής.
Συμβατότητα: Το App Link λειτουργεί σε Android 6.0+ (99% των συσκευών). Για Android 5.x (Lollipop) χρησιμοποιείται κανονικό Deep Link με παράθυρο διαλόγου επιλογής. Γι' αυτό συνιστάται η υποστήριξη και των δύο μηχανισμών: App Link για σύγχρονες συσκευές και Custom URL Scheme ως εναλλακτική για παλαιότερες εκδόσεις. Το Intent Filter με autoVerify="true" δεν σπάει την προς τα πίσω συμβατότητα — σε Android < 6 το χαρακτηριστικό αγνοείται.
| Χαρακτηριστικό | Deep Link | App Link |
|---|---|---|
| Σχήμα | Προσαρμοσμένο (myapp://) | HTTPS (https://domain) |
| Επαλήθευση | Όχι | assetlinks.json |
| Παράθυρο διαλόγου | Εμφανίζεται | Αυτόματη ανακατεύθυνση |
| Έκδοση Android | API 1+ | API 23+ (6.0+) |
| Ευρετηρίαση Google | Όχι | Ναι (URL HTTPS) |
Ρύθμιση App Link απαιτεί τρία βήματα: διαμόρφωση Intent Filter στο manifest, τοποθέτηση assetlinks.json στον διακομιστή και έλεγχος επαλήθευσης. Πρώτο βήμα — προσθήκη Intent Filter με android:autoVerify="true" στο AndroidManifest.xml. Είναι σημαντικό να καθορίσετε το σχήμα HTTPS, τον κεντρικό υπολογιστή και τις διαδρομές που πρέπει να επεξεργάζεται η εφαρμογή. Οι διαδρομές μπορεί να περιέχουν wildcard (*) για υποφακέλους.
Δεύτερο βήμα — δημιουργία assetlinks.json. Το αρχείο μπορεί να δημιουργηθεί μέσω του Android Studio (Tools → App Links Assistant). Ο βοηθός βοηθά επίσης στον εντοπισμό σφαλμάτων και στη δοκιμή. Το αρχείο τοποθετείται στον διακομιστή στη διαδρομή /.well-known/assetlinks.json. Ο διακομιστής πρέπει να επιστρέφει Content-Type: application/json και να είναι προσβάσιμος μέσω HTTPS χωρίς ανακατευθύνσεις. Η Google Play Console εμφανίζει επίσης την κατάσταση επαλήθευσης του App Link στην ενότητα Publishing.
Δοκιμή — τρίτο βήμα. Χρησιμοποιήστε adb για έλεγχο: η εντολή adb shell am start -W -a android.intent.action.VIEW -d "https://example.com/product/42" ανοίγει την εφαρμογή. Εάν αντί για την εφαρμογή ανοίξει το πρόγραμμα περιήγησης — ελέγξτε το assetlinks.json και το autoVerify. Το Android Studio App Links Assistant περιέχει ενσωματωμένο ελεγκτή: εμφανίζει την κατάσταση επαλήθευσης για κάθε τομέα και διαδρομή. Για αυτόματη δοκιμή χρησιμοποιήστε το Android Testing Library με Intent Matcher.
Android 12 (API 31) έφερε αλλαγές στην επεξεργασία του App Link. Προστέθηκε μια νέα επαλήθευση ειδική για τον τομέα: το σύστημα ελέγχει κάθε σύνδεσμο ξεχωριστά, όχι ολόκληρο το Intent Filter. Αυτό αυξάνει την ασφάλεια, αλλά απαιτεί ενημέρωση του αρχείου assetlinks.json κατά την προσθήκη νέων διαδρομών. Το Android 12 εισήγαγε επίσης το Android App Links Assistant μαζί με το ADB — εντολές για διαχείριση επαλήθευσης μέσω κελύφους.
Πολλαπλοί τομείς — τυπικό σενάριο για παραγωγή. Η εφαρμογή μπορεί να επεξεργάζεται συνδέσμους από example.com, m.example.com και example.org. Για κάθε τομέα χρειάζεται ξεχωριστό assetlinks.json στον αντίστοιχο διακομιστή. Στο manifest προστίθενται πολλαπλά Intent Filter — ένα ανά τομέα. Όλοι οι τομείς πρέπει να είναι προσβάσιμοι μέσω HTTPS και να περνούν ανεξάρτητα την επαλήθευση.
App Link και Jetpack Navigation — ο συνιστώμενος τρόπος επεξεργασίας του App Link σε σύγχρονες εφαρμογές Android. Το Jetpack Navigation υποστηρίζει δηλωτικούς deep link στο nav_graph.xml ή μέσω NavDeepLinkRequest. Αυτό απλοποιεί την πλοήγηση: ο προγραμματιστής περιγράφει ποια οθόνη ανοίγει σε ένα συγκεκριμένο URL και το στοιχείο Navigation επεξεργάζεται το ίδιο το Intent και αποκαθιστά τη στοίβα πλοήγησης. Η Google συνιστά τη χρήση του Jetpack Navigation για το App Link.
// Επεξεργασία App Link μέσω Jetpack Navigation
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
handleDeepLink(intent)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
handleDeepLink(intent)
}
private fun handleDeepLink(intent: Intent) {
intent.data?.let { uri ->
navController.handleDeepLink(NavDeepLinkRequest
.Builder
.fromUri(uri)
.build()
)
}
}
}
Google Play Store ελέγχει το App Link κατά τη δημοσίευση. Εάν στο manifest καθορίζεται Intent Filter με autoVerify, αλλά το assetlinks.json δεν είναι προσβάσιμο ή είναι λανθασμένο, το Google Play μπορεί να απορρίψει την ενημέρωση με προειδοποίηση. Στην κονσόλα προγραμματιστή (Policy and Programs → App Links) εμφανίζεται η κατάσταση επαλήθευσης κάθε τομέα. Πριν από τη δημοσίευση, ελέγξτε οπωσδήποτε την κατάσταση — η επιδιόρθωση μετά την απόρριψη της ενημέρωσης καθυστερεί την κυκλοφορία.
Συχνές Ερωτήσεις
App Link — είναι ένα Deep Link με επαλήθευση μέσω Digital Asset Links. Κύριες διαφορές: το App Link χρησιμοποιεί σχήμα HTTPS αντί για προσαρμοσμένο σχήμα, δεν εμφανίζει παράθυρο διαλόγου επιλογής και ευρετηριάζεται από την Google. Το κανονικό Deep Link λειτουργεί σε όλες τις εκδόσεις Android, αλλά απαιτεί μη αυτόματη επιλογή της εφαρμογής.
Το αρχείο τοποθετείται στη ρίζα του διακομιστή HTTPS στη διαδρομή /.well-known/assetlinks.json. Ο διακομιστής πρέπει να επιστρέφει Content-Type: application/json. Το αρχείο πρέπει να ενημερώνεται κατά την αλλαγή του πιστοποιητικού υπογραφής ή την προσθήκη νέων τομέων.
Κύριες αιτίες: απουσία android:autoVerify="true" στο Intent Filter, το assetlinks.json δεν είναι προσβάσιμο μέσω HTTPS, λανθασμένο αποτύπωμα SHA256, διαφορετικό πιστοποιητικό υπογραφής (debug vs release). Ελέγξτε την κατάσταση επαλήθευσης μέσω adb shell dumpsync domain_verification.
Όχι — το App Link απαιτεί διακομιστή HTTPS με προσβάσιμο assetlinks.json. Εάν δεν έχετε τομέα, χρησιμοποιήστε το Firebase Hosting ή το GitHub Pages για τη φιλοξενία του αρχείου. Εναλλακτική: Custom URL Scheme (χωρίς επαλήθευση) ή Firebase Dynamic Links.
Όχι — το App Link υποστηρίζεται σε Android 6.0 (API 23) και νεότερες εκδόσεις. Σε Android 5, το Intent Filter με android:autoVerify="true" αγνοεί το χαρακτηριστικό και λειτουργεί ως κανονικό Deep Link με παράθυρο διαλόγου επιλογής. Συνιστάται η υποστήριξη και των δύο μηχανισμών για συμβατότητα προς τα πίσω.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης