ลิงก์สากลของ iOS ไม่ได้เปิดในแอป


109

ดังนั้นฉันจึงทำตามบทช่วยสอนนี้และใช้ค่าเดียวกันกับที่ให้ไว้: https://blog.branch.io/how-to-setup-universal-links-to-deep-link-on-apple-ios-9

ไฟล์ Apple Association ก็พร้อมใช้งานในลิงค์ไดเร็กทอรี:
WEB_PAGE:PORT_NUMBER/apple-app-site-association

ทุกอย่างดูเหมือนจะถูกตั้งค่าไว้ที่ด้านนี้

ฉันได้เพิ่มสิทธิ์อัปเดตโปรไฟล์การจัดสรรและตั้งค่าทุกอย่างแล้ว

เมื่อฉันเรียกใช้แอปบนอุปกรณ์ของฉันและเปิดลิงก์http://WEB_PAGE:PORT_NUMBERสิ่งนี้จะเปิด Safari เสมอ

ฉันยังมีจุดพักด้วยวิธีการต่อไปนี้:

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray * __nullable restorableObjects))restorationHandler

แต่ zilch.

มีใครสมบูรณ์แบบนี้บ้าง? มีบางอย่างที่ฉันขาดหายไป?


2
เช็คเอาต์ที่นี่เพื่อไม่ให้พลาดทุกขั้นตอนstackoverflow.com/questions/35609667/…
Vineet Choudhary

คำตอบ:


189

มีปัญหาที่เป็นไปได้เล็กน้อย

  1. ลองวางโดเมนของคุณลงในเครื่องมือตรวจสอบลิงก์นี้และตรวจสอบให้แน่ใจว่าไม่มีปัญหา: https://limitless-sierra-4673.herokuapp.com/ (ให้เครดิต ShortStuffSushi - ดูrepo )

  2. iOS จะบันทึกข้อความแสดงข้อผิดพลาดในบันทึกของระบบหากคุณไม่ได้ตั้งค่า TLS อย่างถูกต้องบนโดเมนที่ระบุในสิทธิ์ของคุณ มันฝังอยู่ในบันทึกของระบบปฏิบัติการไม่ใช่บันทึกแอปพลิเคชัน ข้อความแสดงข้อผิดพลาดจะมีลักษณะSep 21 14:27:01 Derricks-iPhone swcd[2044] <Notice>: 2015-09-21 02:27:01.878907 PM [SWC] ### Rejecting URL 'https://examplecustomdomain.com/apple-app-site-association' for auth method 'NSURLAuthenticationMethodServerTrust': -6754/0xFFFFE59E kAuthenticationErrดังนี้ เกิดข้อผิดพลาดที่ดึงมาจากที่นี่อย่างรวดเร็ว (ไม่สมบูรณ์) คำแนะนำเกี่ยวกับการใช้ CloudFlare สำหรับ TLS ที่นี่

  3. ในการทดสอบส่วนตัวของฉันการคลิก / พิมพ์ลิงก์ใน Safari ไม่เคยเปิดแอปโดยตรงเลยสักครั้ง การคลิกจากแอพอื่น ๆ (iMessage, Mail, Slack ฯลฯ ) ได้ผล คนอื่น ๆ รายงานว่าการคลิกลิงก์ในผลการค้นหาของ Google ได้เปิดแอปโดยตรง

  4. โปรดทราบว่าหาก Universal Link ประสบความสำเร็จในการเปิดแอปของคุณจากนั้นคุณคลิกผ่านไปยัง Safari (โดยการแตะที่ไซต์ของคุณที่มุมขวาบนของแถบนำทางในแอป) iOS จะหยุดเปิดแอปเมื่อคุณไปที่ URLนั้น จากนั้นใน Safari คุณสามารถดึงลงเพื่อแสดงแบนเนอร์ที่ด้านบนของหน้าด้วยคำว่า "เปิด" ฉันเสียเวลากับเรื่องนี้มากโปรดทราบว่าการคลิกผ่านไปยังไซต์ => การปิดใช้งาน UL ดูเหมือนจะเป็นเส้นทางที่เฉพาะเจาะจงตามเส้นทางที่คุณระบุในไฟล์ apple-app-site-Assocation ดังนั้นถ้าคุณมีเส้นทางที่แยกจากกันyoursite.com/a/*และyoursite.com/b/*ถ้าคุณคลิกyoursite.com/a/*และจะเปิดแอปของคุณโดยตรงแล้วคุณมีตัวเลือกที่มุมขวาบนของ app yoursite.com/a/*คลิกผ่านไปยัง หากคุณทำเช่นนั้นการเข้าชมครั้งต่อไปyoursite.com/a/*จะเปิดในเบราว์เซอร์ไม่ใช่แอป อย่างไรก็ตามyoursite.com/b/*ควรได้รับผลกระทบและยังคงเปิดแอปของคุณโดยตรง

โปรดแจ้งให้เราทราบหากคุณพบว่าปัญหาคืออะไร โดยส่วนตัวแล้วฉันอยากรู้มากว่า Universal Links ทำงานอย่างไรและมีกรณีใดบ้าง โชคดี.


1
สิ่งเดียวกัน. แปลกมาก บางครั้งก็เปิดแอปโดยตรงบางครั้งก็เปิด webView ฉันหวังว่าพวกเขาจะทำให้เอกสารชัดเจน การทำงานของคุณลักษณะนี้ไม่แน่นอน
Legolas

4
เกี่ยวกับ 1) คุณไม่จำเป็นต้องลงชื่อไฟล์การเชื่อมโยงแอปเปิ้ลแอปไซต์ของคุณอีกต่อไปหากคุณให้บริการผ่าน https
Jeremy Hicks

11
การรีสตาร์ทอุปกรณ์ iOS ของคุณอาจช่วยได้เช่นกัน ฉันตรวจสอบการตั้งค่าและการกำหนดค่าทั้งหมดสามครั้งและฉันแน่ใจอย่างยิ่งว่าทุกอย่างถูกต้อง แต่ก็ยังใช้ไม่ได้ จากนั้นฉันก็ลองกับอุปกรณ์อื่นและมันทำงานได้อย่างสมบูรณ์ จากนั้นฉันก็ลบแอพออกจากอุปกรณ์เดิมรีสตาร์ทอุปกรณ์และติดตั้งแอพใหม่จากนั้นมันก็ใช้งานได้ ...
mathz

4
จะกลับเข้าแอพแทนซาฟารีได้อย่างไรหากมีคนกดลิงค์เว็บไซต์ที่มุมขวาของแอพโดยไม่ได้ตั้งใจ
iEngineer

3
ฉันไม่ได้รับแบนเนอร์เปิดในแอปเลย หลังจากค้นหามานานนี่คือวิธีแก้ปัญหา: พิมพ์ลิงค์สำหรับไซต์ของคุณในแอพ Notes (ซึ่งเป็นลิงค์สากล) ตอนนี้คลิกเสร็จสิ้น เมื่อมันกลายเป็นลิงค์ให้คลิกยาว ๆ แล้วเลือก "Open in AppNAME-HERE"!
kishorer747

64

มีหลายวิธีที่อาจผิดพลาดได้ สองจุดทำให้ฉันมีปัญหา:

  • ใน Xcode เมื่อคุณเพิ่มสิทธิ์ในโดเมนที่เกี่ยวข้องแต่ละรายการจะต้องขึ้นต้นด้วยapplinks:ชื่อโดเมนของคุณ เช่นapplinks:www.apple.com.

  • แม้ว่า Xcode จะสร้างไฟล์สิทธิ์ให้ฉัน แต่ก็ไม่ได้รวมอยู่ในบิลด์ของฉัน: ฉันต้องคลิกช่องนั้นด้วยตนเอง

และใช่หลังจากทำเช่นนั้นคุณไม่จำเป็นต้องเซ็นชื่อapple-app-site-associationไฟล์ แต่เป็นเพียงข้อความธรรมดาและใช้งานได้ตราบใดที่แสดงผ่าน HTTPS (คุณยังคงต้องลงนามหากคุณรองรับ iOS 8)


4
ฉันต้องลบแอปออกจากอุปกรณ์ทดสอบอย่างสมบูรณ์จากนั้นสร้างและเรียกใช้อีกครั้งก่อนที่จะใช้งานได้ในที่สุด
Phil Andrews

14
คุณช่วยวันของฉันนี่เป็นปัญหาของฉันแม้ว่า XCode จะสร้างไฟล์สิทธิ์ให้ฉัน แต่ก็ไม่ได้รวมอยู่ในบิลด์ของฉัน: ฉันต้องคลิกที่ช่องนั้นด้วยตนเอง
จาม

12
การรวมไฟล์การให้สิทธิ์ในบิลด์ก็ช่วยแก้ปัญหาให้ฉันได้เช่นกัน เป็นที่น่าสังเกตว่าใน Xcode 8 ช่องทำเครื่องหมายการเป็นสมาชิกเป้าหมายใน File Inspector ถูกปิดใช้งานจริง ฉันต้องไปที่การตั้งค่าการสร้างและเพิ่มไฟล์สิทธิ์ในขั้นตอนการคัดลอกทรัพยากร
Charles A.

5
@cham: พวกคุณช่วยอธิบายให้ละเอียดได้ไหมว่า "แม้ว่า XCode จะสร้างไฟล์สิทธิ์ให้ฉัน แต่มันไม่ได้รวมอยู่ในบิลด์ของฉันฉันต้องคลิกที่ช่องนั้นด้วยตนเอง"
แพม

6
@AwaisFayyaz ไปที่ขั้นตอนการสร้าง> คัดลอกทรัพยากร Bundle คลิกเครื่องหมายบวกจากนั้นเพิ่มไฟล์สิทธิ์ของคุณ
s.zainulabideen

36

เห็นได้ชัดว่ามีข้อผิดพลาดในเอกสารสำหรับการสร้างไฟล์การเชื่อมโยงสำหรับ Universal Linksเอกสารสำหรับการทำไฟล์สมาคมยูนิเวอร์แซลิงก์

ที่กล่าวว่า:

ค่าของคีย์ appID คือรหัสทีมของแอปและรหัสกลุ่ม

มันควรจะพูด

ค่าของคีย์ appID คือคำนำหน้าของแอปและรหัสกลุ่ม

สำหรับแอปส่วนใหญ่ดูเหมือนว่า ID ทีมและคำนำหน้าแอปจะเหมือนกัน แต่หากแอปของคุณอยู่ในสโตร์มาหลายปีค่าเหล่านี้อาจแตกต่างกัน

หากต้องการค้นหาค่านี้ให้เปิดศูนย์สมาชิกบนhttps://developer.apple.comและดูที่ "ใบรับรองตัวระบุและโปรไฟล์" คลิก "ตัวระบุ" จากนั้น "รหัสแอป" ในตารางใต้ "ตัวระบุ" ค้นหาแอปของคุณและใช้ค่า Prefix และ Bundle ID ที่นั่นเพื่อสร้าง AppID ของคุณสำหรับไฟล์การเชื่อมโยง


2
+1 สิ่งนี้ช่วยฉันได้มาก ใช้เวลาครึ่งวันเพื่อหาสาเหตุว่าทำไมมันถึงไม่ได้ผลและดูเหมือนว่าจะเป็นเช่นนั้นสำหรับฉัน
Ivo Beckers

คุณบันทึกวันของฉันในการกระทำแอปของฉันเมื่อนานมาแล้วและคำนำหน้าแอปแตกต่างจากรหัสทีม
Ti3t

นี่เป็นสิ่งเดียวที่เหมาะกับฉัน ขอบคุณ!
dhin

นี่เป็นทางออกสำหรับฉัน คำแนะนำที่ดี
vincenth

33

ในการช่วยแก้ไขปัญหานี้ให้ค้นหา "swcd" ในเอาต์พุตคอนโซลของอุปกรณ์เมื่อติดตั้งแอปเพื่อดูว่าการลงทะเบียนลิงก์สากลของคุณใช้งานได้หรือล้มเหลว

  1. ใช้อุปกรณ์จริงไม่ใช่เครื่องจำลอง
  2. ลบแอพออกจากอุปกรณ์ของคุณ
  3. เชื่อมต่ออุปกรณ์กับคอมพิวเตอร์ของคุณและดูเอาต์พุตคอนโซลของอุปกรณ์ใน xcode (หน้าต่าง -> อุปกรณ์ -> [อุปกรณ์ของคุณ] -> เปิดคอนโซล) เปิดหน้าต่างนี้ไว้
  4. ติดตั้งแอปของคุณและปล่อยให้เปิดใช้งาน
  5. กรองเอาต์พุตคอนโซลเป็น "swcd" หากประสบความสำเร็จคุณจะเห็นบางอย่างเช่นภาพหน้าจอต่อไปนี้ หากล้มเหลวคุณจะเห็นอย่างอื่น หากคุณไม่เห็นอะไรเลยแสดงว่าคุณทำอะไรบางอย่างโดยพื้นฐานเช่นการเพิ่มสิทธิ์ในโดเมนที่เกี่ยวข้อง

เพิ่มลิงก์แอปเรียบร้อยแล้ว


2
เคล็ดลับเด็ด! ฉันกำลังเพิ่ม https: // ลงใน applinks: entitlement และยังระบุเส้นทางแบบเต็มที่ฉันต้องการฟังซึ่งเป็นข้อผิดพลาดทั้งคู่ ฉันกำลังระบุexample.com/path * ซึ่งฉันควรระบุเฉพาะ domain.com ของฉันและไฟล์ AASA ที่ example.com จากนั้นระบุเส้นทางเทียบกับรหัสบันเดิลของแอป
Numan Tariq

3
ฉันสามารถโอนเงินโบนัสให้คุณได้หรือไม่? ฉันใช้เวลา 2 วันในการทำทุกขั้นตอนของการตั้งค่าลิงก์สากลที่แปลกประหลาดนี้ไม่มีอะไรช่วยได้จนกว่าฉันจะลองใช้แนวทางของคุณ ฉันโชคไม่ดีจริงๆที่โฮสต์ไฟล์การเชื่อมโยงของฉันในโฟลเดอร์รูทของ firebase สำหรับโดเมนของฉันและปรากฎว่า Apple สอบถาม. well-known / subdirectory ก่อนและดูเหมือนว่า firebase จะตอบกลับด้วยไฟล์การเชื่อมโยงที่ถูกต้อง (!) ของพวกเขาเอง ไม่มีแอปที่เชื่อมโยง เอ้ยฉันจะหาสิ่งนี้ได้อย่างไร Apple?
nalexn

คำใบ้ดีมาก! ฉันไม่รู้เกี่ยวกับคอนโซลอุปกรณ์นี้เพียงแค่ดูที่เอาต์พุตคอนโซล Xcode ปัญหาของฉันคือ 2 ใน 3 โดเมน Deeplink ทำงานไม่ได้ แต่ไม่ใช่โดเมนสุดท้าย และที่นั่นในคอนโซลฉันเห็นว่าสำหรับโดเมนสุดท้ายของฉันฉันสะกดผิดด้วย "appllinks: <domain>" (2 L's) โอ้มนุษย์…อย่างไรก็ตามขอขอบคุณอีกครั้งสำหรับวิธีตรวจสอบที่ดีเยี่ยมในการตรวจสอบว่า Universal Links มีการลงทะเบียนจริงหรือไม่! (ฉันพบบันทึกคอนโซลการลบลิงก์เมื่อถอนการติดตั้งแอป: +1)
Arno Teigseth

1
มันควรจะเป็นแบบ verbose โดยปริยายหรือไม่? เพราะฉันไม่ได้รับบันทึกรายละเอียดเช่นนี้ .. หมายความว่าการดำเนินการไม่สำเร็จหรือไม่?
Nicholas Allio

26

คำตอบของ St.derrickเป็นข้อมูล

แต่ในการเปิดใช้งานลิงก์สากลอีกครั้งเพื่อเปิดในแอปแทนที่จะเป็นซาฟารีเราต้องทำสิ่งต่อไปนี้

  • กดลิงค์ Universal ใน Mail หรือ iMessage ค้างไว้จากนั้นคุณจะเห็นตัวเลือกว่าจะเปิดในซาฟารีหรือในแอพ

2
ไม่มีตัวเลือกappให้คัดลอกเปิดเพิ่มในรายการรออ่านเป็นต้น
iEngineer

1
เกือบจะบ้าในการแก้ไขปัญหานี้ แต่นี่คือทางออกหรือฉัน บางทีถ้าไม่ได้ตั้งค่าอย่างถูกต้องและแอพ Mail เปิดลิงค์ในซาฟารีมันจะเปิดในซาฟารีเสมอ? ไม่รู้ แต่ครั้งหนึ่งฉันกด -> เปิดใน 'myapp' ... และตอนนี้ลิงก์เปิดอย่างถูกต้อง!
herbert

1
ขอบคุณมากสำหรับการแก้ปัญหานี้ ฉันติดอยู่ในนี้เกือบหนึ่งวัน คุณช่วยวันของฉัน
andrew


18

ฉันรู้ว่าสิ่งที่เป็นปัญหาสำหรับฉันคือลิงก์ไปยังไดเรกทอรีราก a (เช่นhttp://example.com/) ไม่ได้เปิดแอปของฉัน แต่ถ้าฉันเพิ่มเส้นทาง (เช่นhttp://example.com/mypath) มันใช้งานได้ การเพิ่ม"/"ไปยังรายการเส้นทางได้เลื่อน:

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "TEAM_ID.BundleIdentifier",
                "paths": [ "*", "/" ]
            }
        ]
    }
}

ในฐานะที่เป็นคำตอบโดย slutsker ในนี้แอปเปิ้ลผู้พัฒนาหัวข้อฟอรั่ม


17

ขั้นตอนด่วนเพื่อตรวจสอบว่าคุณติดตั้ง Universal Link อย่างถูกต้องหรือไม่

  • แตะลิงก์ที่คุณคาดว่าจะเปิดแอปค้างไว้ คุณควรเห็น "เปิดใน [ชื่อแอปของคุณ]" ในเมนูบริบท

  • เปิดแอพ Notes พิมพ์ลิงค์ที่คุณคาดว่าจะเปิดแอพ แตะเสร็จสิ้น ลิงค์จะกลายเป็นสีเหลืองและการแตะที่ลิงค์ควรเปิดแอพของคุณไม่ใช่ Safari

  • หากลิงก์http://yourDomain.comไม่เปิดแอปให้ลองใช้http://yourDomain.com/yourFolder/

  • ใน Safari หากเมนูบริบทแสดง "เปิดใน [ชื่อแอปของคุณ]" ในซาฟารี แต่การแตะที่ลิงก์จะเป็นการเปิดลิงก์ในซาฟารีแทนการเปิดแอป

    ก. ลองดึงหน้าซาฟารีที่เปิดขึ้นเมื่อคลิกลิงก์เหมือนกับวิธีที่คุณ "ดึงเพื่อรีเฟรช" แบนเนอร์ควรปรากฏขึ้นซึ่งสามารถเปิดแอปของคุณได้ แตะแบนเนอร์เพื่อเปิดแอพปิดแอพโดยกดปุ่มโฮมกลับไปที่ซาฟารีแล้วลองเปิดแอพโดยแตะที่ลิงค์อีกครั้ง ในครั้งนี้แอปควรเปิดใช้งานเนื่องจากการแตะแบนเนอร์ควรบันทึกค่ากำหนดเพื่อเปิดลิงก์ในแอป

    ข. หากแอปยังไม่เปิดใช้งานหลังจากขั้นตอนก. ให้ลองส่งลิงก์ไปยังเว็บเมลเช่น gmail ทางไปรษณีย์แล้วเปิดเว็บไซต์เว็บเมลในซาฟารีแล้วลองคลิกลิงก์ หากได้ผลคุณอาจพยายามเปิดแอปจากโดเมนเดียวกับลิงก์ จากสิ่งที่ผมได้เห็นการเปิดตัวแอปจากโดเมนเดียวกันส่วนใหญ่ล้มเหลว ซาฟารีอาจไม่สนใจที่จะตรวจสอบว่า URL ปลายทางเป็นลิงก์สากลหรือไม่เมื่อลิงก์อยู่ในโดเมนเดียวกับที่ผู้ใช้เปิดอยู่ ดังนั้นลองเปิดแอปจากโดเมนอื่น


3
นั่นคือมันกำลังจัดการกับปัญหานี้เป็นเวลาหลายชั่วโมงการเปิดตัวแอปจากโดเมนเดียวกันเกือบจะล้มเหลว ขอบคุณ :)
maledr53

12

สิ่งสำคัญอย่างยิ่งในการเพิ่มเวอร์ชันโครงการหรือหมายเลขบิลด์หลังจากรวมลิงก์สากลเข้าด้วยกัน แม้ว่าคุณจะลบ / ติดตั้งใหม่ แต่ iOS จะไม่รับลิงก์เว้นแต่คุณจะชนเวอร์ชัน


1
นี้! เวอร์ชันบันเดิลเป็นสิ่งที่ทำให้การทดสอบของฉันล้มเหลวโดยสิ้นเชิงเพราะฉันจะทำตามคำแนะนำทั้งหมดข้างต้นและลิงก์ของฉันจะยังคงเปิด Safari เนื่องจาก iOS ใช้ผลลัพธ์ที่แคชจากเวอร์ชันก่อนหน้าapple-app-site-associationซึ่งมีคำนำหน้า appId ไม่ถูกต้อง
zai chang

Kyle ฉันคิดว่าฉันรักคุณ! คำตอบนี้ช่วยวันนี้ขอขอบคุณ!
neiker

นี่เป็นซอสลับสำหรับฉัน! ขอบคุณขอบคุณขอบคุณ!
nurider

11

สำหรับใครก็ตามที่ต้องการทดสอบการเปิดลิงค์ (Universal) อย่างง่ายดายคุณยังสามารถเปิดลิงก์ใน Simulator ของคุณจากเทอร์มินัลด้วยคำสั่งนี้:

xcrun simctl openurl booted yourapp_or_http://yourlink

ตัวอย่างเช่น:

xcrun simctl openurl booted https://www.google.com


1
ฉันไม่สามารถใช้งานได้มันมักจะเปิด Safari พวกเขาทำงานได้เมื่อฉันทำงานบนอุปกรณ์จริง ความคิดใด ๆ จะได้รับการชื่นชมเนื่องจากเป็นการดีบัก / พัฒนาที่เจ็บปวดกว่าเล็กน้อยโดยไม่ต้องใช้เครื่องจำลอง
chib

10
  • Universal Links จะไม่ทำงานหากคุณวางลิงก์ลงในช่อง URL ของเบราว์เซอร์

  • ยูนิเวอร์แซลิงก์ทำงานกับผู้ใช้ขับเคลื่อน<a href="...">องค์ประกอบคลิกข้ามโดเมน ตัวอย่าง: หากมี Universal Link ใน google.com ชี้ไปที่ bnc.lt ก็จะเปิดแอป

  • ยูนิเวอร์แซลิงก์จะไม่ทำงานกับผู้ใช้ขับเคลื่อน<a href="...">องค์ประกอบคลิกบนโดเมนเดียวกัน ตัวอย่าง: หากมี Universal Link บน google.com ชี้ไปที่ Universal Link อื่นใน google.com แอปจะไม่เปิดขึ้น

  • ไม่สามารถทริกเกอร์ Universal Links ผ่าน Javascript (ใน window.onload หรือผ่าน. click () call on an <a>element) เว้นแต่จะเป็นส่วนหนึ่งของการดำเนินการของผู้ใช้

แหล่งที่มา: https://dev.branch.io/getting-started/universal-app-links/support/ios/#appsbrowsers-that-support-universal-links

สัญลักษณ์แสดงหัวข้อย่อยที่ 3 ทำให้ฉันเสียเวลาประมาณหนึ่งวันในการคิดออก


1
สัญลักษณ์แสดงหัวข้อย่อยที่ 3 เหมือนกันที่นี่: เสียเวลาหลายชั่วโมงในการหาสิ่งนั้น แอปเปิ้ลมีแม้กระทั่งความสุขคำอธิบายที่โง่มากสำหรับมัน "iOS เคารพของผู้ใช้มีแนวโน้มความตั้งใจมากที่สุดและเปิดการเชื่อมโยงในซาฟารี" เห็นตัวเองที่นี่
jox

กระสุนที่ 3 TOP!
Byteros

7

ในกรณีที่ผู้คนที่นี่กำลังมองหาวิธีแก้ปัญหาอื่น ๆ เราได้รวบรวมวิธีการแก้จุดบกพร่อง Universal Links แบบทีละขั้นตอนเนื่องจากเราได้เห็นปัญหามากมายปรากฏขึ้นทำให้ปวดหัวมาก

ลองดูสิ:

คู่มือการดีบักลิงก์สากล

ดูตัวอย่างคู่มือการดีบัก

หากคุณต้องการตั้งค่า Universal Links ใหม่คู่มือนี้มีประโยชน์มาก:

คู่มือการตั้งค่า Deep Linking ของ iOS

หวังว่าจะเป็นประโยชน์!


มีประโยชน์มากขอบคุณ! ทำงานให้ฉันเมื่อใช้งานบนอุปกรณ์จริง แต่ไม่ใช่ iOS Simulator
Josh Sklar

6

แค่คิดว่าฉันจะเพิ่มบางสิ่งที่ฉันค้นพบเผื่อว่าจะมีคนเจอปัญหาเดียวกันกับฉันอีกในอนาคต สิ่งเหล่านี้ส่วนใหญ่เกี่ยวข้องกับข้อผิดพลาดในการตรวจสอบสิทธิ์

แม้ว่า apple จะไม่ได้ระบุไว้อย่างชัดเจน แต่apple-app-site-associationไฟล์นั้นจะต้องแสดงผ่าน https แม้ว่าจะเซ็นชื่อก็ตาม ใบรับรองที่ใช้สำหรับ https ต้องได้รับความเชื่อถือจาก apple ด้วย ดังนั้นแม้ว่าใบรับรองที่เพิ่มลงในอุปกรณ์ในการตั้งค่า -> ทั่วไป -> โปรไฟล์จะอนุญาตให้ใช้ https ในซาฟารี แต่จะไม่อนุญาตให้ลิงก์สากลทำงาน

"TrustResultValue" : 4ในบันทึกของอุปกรณ์ที่เกี่ยวกับการตรวจสอบข้อผิดพลาดระหว่างอุปกรณ์และเซิร์ฟเวอร์จะมีค่าพิมพ์เช่น A TrustResultValueจาก 5 หมายถึงใบรับรองเป็นโดเมนที่ไม่ถูกต้อง (เช่น test.com ที่มาจาก www.test.com) A TrustResultValueจาก 4 หมายถึงใบรับรองไม่น่าเชื่อถือสำหรับการใช้งานนี้

อาจจะมีขั้นตอนที่เป็นประโยชน์บางอย่างสำหรับการแก้จุดบกพร่องที่นี่ ส่วน "การทดสอบการเข้าถึง apple-app-site-Association" เป็นคำแนะนำทีละขั้นตอนสำหรับวิธีตรวจสอบว่าอุปกรณ์ได้รับapple-app-site-associationไฟล์ ขั้นตอนต้มลงไปที่:

  1. ถอนการติดตั้งแอป สิ่งนี้จำเป็นเนื่องจากไฟล์ถูกดาวน์โหลดเมื่อติดตั้ง

  2. apple-app-site-associationหยุดเซิร์ฟเวอร์จากการให้บริการอย่างถูกต้อง

  3. ใน xcode เปิดหน้าต่าง -> อุปกรณ์จากนั้นเลือกอุปกรณ์ของคุณ

  4. เปิดบันทึกอุปกรณ์โดยคลิกสามเหลี่ยมที่ด้านล่างของหน้าต่าง

  5. ล้างบันทึกโดยคลิกที่ถังขยะเพื่อล้างบันทึกก่อนหน้านี้ที่อาจเกี่ยวข้อง

  6. ติดตั้งแอปอีกครั้งด้วย xcode โดยคลิกปุ่มเล่น

  7. หลังจากเปิดตัวแอปแล้วหากอุปกรณ์ร้องขอไฟล์อย่างถูกต้องบันทึกของอุปกรณ์ควรมีข้อผิดพลาดที่สามารถพบได้โดยค้นหา "apple-app-site-สมาคม"

หากapple-app-site-associationไฟล์ถูกส่งอย่างถูกต้อง (ขั้นตอนที่ 2 ถูกปล่อยทิ้งไว้) ก็ไม่ควรมีข้อผิดพลาด ข้อผิดพลาดในการตรวจสอบสิทธิ์อาจแสดงแทนหากเป็นปัญหา


1
ฉันทำการปลอมแปลง SSL โดยใช้ Charles Proxy และสิ่งนี้ส่งผลให้ค่าความเชื่อถือเป็น 4 เมื่อฉันปิดพร็อกซีมันสำเร็จ
Ben Flynn

6

สาเหตุส่วนใหญ่เกิดจากเมื่อผู้ใช้แตะที่ด้านบนขวาจึงบอกให้ iOS ไม่เปิดแอป (ในกรณีนี้คือ Uber) ในอนาคต

ในการแก้ไขให้ดึงลงเพื่อแสดงแบนเนอร์อัจฉริยะแล้วแตะเปิด:

ดึงลงใน Safari แล้วเปิดอีกครั้ง

หลังจากนั้นจะ "จำ" เพื่อเปิดแอป


5

เราได้เพิ่มไฟล์การเชื่อมโยงแอปเปิ้ลแอปไซต์ลงในตำแหน่งนี้:

https://example.com/apple-app-site-association

บน iOS 9 ใช้งานได้ดี แต่บน iOS 10 ใช้งานไม่ได้

ปรากฏว่ามีปัญหากับเส้นทางที่รู้จักกันดี :

https://example.com/.well-known/apple-app-site-association

เนื่องจากเส้นทางhttps://example.com/.well-known/apple-app-site-associationเปลี่ยนเส้นทางไปยังhttps://example.com

<Notice>: Allowing redirect 'https://example.com/.well-known/apple-app-site-association' -> 'https://example.com/'
<Notice>: ### Rejecting AASA file size 154466 for URL https://example.com/.well-known/apple-app-site-association

ในความคิดของฉันหากเส้นทางที่รู้จักกันดีทำงานไม่ถูกต้องมันจะทำลายลิงก์สากล


คู่มือบอกอย่างชัดเจนว่า "ต้องเข้าถึงไฟล์ผ่าน HTTPS - โดยไม่ต้องเปลี่ยนเส้นทางใด ๆ "
eonil

คู่มือยังระบุไว้อย่างชัดเจนว่า "สำหรับแอปที่ทำงานใน iOS 9.3.1 ขึ้นไปขนาดไฟล์ที่ไม่บีบอัดของไฟล์การเชื่อมโยงแอปเปิ้ลไซต์จะต้องไม่เกิน 128 KB ไม่ว่าจะเซ็นชื่อไฟล์หรือไม่ก็ตาม" ไฟล์นี้มีขนาด 154 KB
Roberto

เมื่อวันที่ iOS11 เซิร์ฟเวอร์ของคุณอย่างชัดเจนควรกลับ 404 สถานะ: example.com/.well-known/apple-app-site-associationแล้วใช้ SWCD fallback ราก: example.com/apple-app-site-association คุณสามารถตรวจสอบสถานะ HTTP ที่ส่งคืนได้อย่างรวดเร็วด้วยเครื่องมือเช่น Postman
Max Odnovolyk

4

ฉันสามารถทำให้มันใช้งานได้ แต่ต้องใช้เวลาและดิ้นรนพอสมควร โปรดทราบว่าหากคุณไม่เซ็นชื่อ apple-app-site-association ไฟล์ (การเซ็นชื่อเป็นทางเลือก!) การแตะที่ลิงก์ใน Safari จะไม่เปิดแอปของคุณ (ทำให้ฉันปวดหัวมาก)


1
ที่อยากรู้อยากเห็น Apple ระบุในเอกสาร ว่าสำหรับ Universal Links ที่บริสุทธิ์และการใช้งานใน iOS9 คุณไม่จำเป็นต้องลงนาม เฉพาะในกรณีที่คุณต้องการรองรับ iOS 8 Handoff / Shared Web Credentials เท่านั้นที่คุณควรลงชื่อเข้าใช้ น่าสนใจ! ฉันมีปัญหาเดียวกันดังนั้นฉันจะลองเซ็นชื่อ
wrtsprt

การลงนามเป็นทางเลือก การแตะลิงก์ใน Mobile Safari เพื่อทริกเกอร์การเปิดแอป iOS ดั้งเดิมเรียกว่า "Web Browser – to – Native App Handoff" ในกรณีนี้คุณจะต้องเพิ่มactivitycontinuationคุณสมบัติให้กับapple-app-site-associationไฟล์ json developer.apple.com/library/ios/documentation/UserExperience/…
Devy

3

เอาฉันเกือบวันเพื่อคิดออก ปัญหาที่ฉันพบคือไม่ดาวน์โหลดโปรไฟล์การจัดเตรียมที่อัปเดตใน XCode (ฉันเริ่ม XCode ใหม่หลังจากนี้ด้วย)

(ค่ากำหนด> บัญชี> ดูรายละเอียด> ดาวน์โหลดทั้งหมด)


3

คุณสามารถทดสอบลิงก์สากลในโปรแกรมจำลอง

จากคู่มือการเขียนโปรแกรมค้นหาแอป: รองรับ Universal Links


6
มีใครได้รับลิงก์สากลเพื่อทำงานในโปรแกรมจำลองหรือไม่? ฉันพยายามนับครั้งไม่ถ้วนและไม่ได้ผล มันทำงานโดยใช้อุปกรณ์จริงที่มีขั้นตอนเดียวกัน
Tony

ฉันไม่สามารถทดสอบสิ่งนี้ได้เช่นกัน การพยายามให้ Safari เรียกใช้ลิงก์สากลในโปรแกรมจำลองนั้นไร้ผลแม้ว่าจะทำงานได้อย่างถูกต้องบนอุปกรณ์จริงก็ตาม
Albert Bori

ฉันไม่สามารถให้พวกเขาทำงานในเครื่องจำลองได้เช่นกัน @AlbertBori คุณทำงานนี้ได้หรือไม่?
chib

ฉันเกือบบางอย่างที่พวกเขาไม่ได้ทำงานในการจำลอง ฉันคุ้นเคยกับข้อผิดพลาดอื่น ๆ ทั้งหมดและฉันไม่สามารถทำให้พวกเขาทำงานในเครื่องจำลองได้ ..
Fattie

3

หลังจากสองวันปรากฎว่าสำหรับฉันลิงก์ประเภทนี้ (จากสาขา)

applinks: xxxx.app.link

ทำงานหลังจากเก็บแอปพลิเคชัน (รวมถึง Ad-hoc) และติดตั้งลงในโทรศัพท์เท่านั้น


3

หากคุณโฮสต์apple-app-site-associationบนFirebaseอย่าลืมใส่ไว้ใน/.well-known/ไดเรกทอรีย่อย! ดูเหมือนว่า Xcode จะค้นหา URL นั้นก่อนและหากสำเร็จก็จะไม่พยายามค้นหาapple-app-site-associationในไดเรกทอรีราก ด้วยเหตุผลบางประการวิศวกร Firebase จึงทำให้เว็บไซต์ที่โฮสต์ตอบสนองโดยอัตโนมัติ/.well-known/apple-app-site-associationด้วยไฟล์การเชื่อมโยงที่ว่างเปล่า (แต่มีรูปแบบที่ถูกต้อง) ซึ่งจะแทนที่ไฟล์ที่กำหนดเองของคุณทำให้คุณไม่ต้องสงสัยเลยว่าทำไมไม่มีอะไรทำงาน!


2
ในที่สุด! ขอบคุณมาก. มันถูกเขียนขึ้นในที่ไหนสักแห่ง? Firebase ควรจัดทำเอกสารไว้ที่ไหนสักแห่ง
Berkay Turancı

2

ไปที่ developer.apple.com และแก้ไขโปรไฟล์การแจกจ่ายของคุณ ในหน้าแก้ไขคุณสามารถเปิดpop up สำหรับ App รหัสที่จะแสดงรายชื่อแอปของคุณและใน () วงเล็บรอบหลังชื่อของแอปมันเผยให้เห็นทั้งหมดของคุณจริง App รหัส ปพลิเคชันบางคนอาจจะมี ID ทีมงานของคุณเป็นคำนำหน้า แต่บางคนทำไม่ได้ ตรวจสอบให้แน่ใจว่าได้ใช้สิ่งที่คุณเห็นในเมนูป๊อปอัพนั้นภายใน () และใส่ลงในฟิลด์ appID รายละเอียดการเชื่อมโยงแอปเปิ้ล - แอปไซต์ ฉันมีปัญหานี้กับแอปและลิงก์สากล


2

ปัญหาสำหรับฉันกลายเป็นapple-app-site-associationไฟล์ ตามเอกสารของ Apple จำเป็นต้องใช้พารามิเตอร์ applinks เท่านั้น ฉันเพิ่มactivitycontinuationพารามิเตอร์และใช้งานได้

{
  "activitycontinuation": {
    "apps": [
      "9JA89QQLNQ.com.apple.wwdc"
    ]
  },
  "applinks": {
    "apps": [],
    "details": [{
        "appID": "9JA89QQLNQ.com.apple.wwdc",
        "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*" ]
      }]
  }
}

3 ปีต่อมาและเราได้แก้ไขปัญหานี้ การเพิ่มactivitycontinuationคือสิ่งที่แก้ไขให้เรา
readyornot

2

ยังไม่เห็นปัญหา / คำสั่งผสมวิธีแก้ปัญหาเดียวกันที่ทำให้มันใช้งานได้สำหรับฉันดังนั้นอาจเพิ่มของฉันในกรณีที่มีคนมีปัญหาเดียวกัน!

สำหรับแอปของฉันฉันใช้โครงร่าง URL ที่กำหนดเอง (ตั้งค่าใน APP_TARGET > Info > URL Types ) และตั้งค่าโครงร่าง URL จากที่นี่ลงในคอนโซล Firebase เพื่อจับคู่ แต่ก็ยังใช้งานไม่ได้

ปัญหาของฉันจริงๆแล้วมีสองปัญหา:

ดูว่าการตรวจสอบจัดการการลงนามโดยอัตโนมัติหรือไม่

หากคุณกำลังตรวจสอบการตั้งค่า "จัดการการลงนามโดยอัตโนมัติ" ของ Xcode เหมือนกับที่ฉันเป็นเพราะฉันแค่พยายามสร้างแอปสาธิตอย่างรวดเร็วคุณจะต้องตรวจสอบให้แน่ใจว่า TeamID ที่ใช้นั้นตรงกับที่ใช้ในคอนโซล Firebase ของคุณ เดิมทีฉันไปที่บัญชีนักพัฒนา Apple และคัดลอก ID ทีมจากหน้าการเป็นสมาชิกของฉัน แต่ภายหลังพบว่ารหัสจริงที่ Xcode ใช้นั้นแตกต่างกัน (คุณสามารถค้นหาสิ่งนี้ได้ในAPP_TARGET > General > Signing > Signing Certificate.สำหรับฉันดูเหมือนว่าiPhone Developer: My Name (TEAM_ID))

นำหน้า TeamID ของคุณเป็น Bundle Identifier ในประเภท URL ของคุณ

หลังจากที่ฉันแน่ใจว่าสิ่งเหล่านี้ตรงกันในคอนโซล Firebase และ Xcode ของฉันปัญหาต่อไปของฉันคือตัวระบุสำหรับสกีม URL ของฉัน เป็นเรื่องปกติที่จะใช้ตัวระบุกลุ่มของคุณที่นี่ แต่จริงๆแล้ว Firebase จะนำหน้ารหัสนี้ด้วยรหัสทีมที่คุณให้ไว้ในคอนโซล Firebase ดังนั้นฉันจึงต้องนำหน้ารหัสดังกล่าวไปยังตัวระบุในส่วนประเภท URL ใน Xcode ด้วย

หลังจากแก้ไขทั้งสองนี้และดาวน์โหลดGoogleService-Info.plistไฟล์อีกครั้งฉันก็ไม่มีปัญหาในการเปิดลิงก์แบบไดนามิก


2

หลังจากสองวันของความสิ้นหวังทั้งหมดฉันคิดว่าในที่สุดฉันก็แก้ไขได้แล้ว นี่คือทางออกของฉัน:

ดูเหมือนว่าแอพรุ่นเก่าจะใช้คำนำหน้าแอพต่างจากแอพใหม่ ๆ แอปใหม่กว่าใช้ Team ID เพื่อจุดประสงค์นี้เท่านั้น หากคำนำหน้าแอปและรหัสทีมไม่เหมือนกันดูเหมือนว่าคุณต้องระบุช่องความต่อเนื่องของกิจกรรมในไฟล์การเชื่อมโยงไซต์แอป apple:

{
    "activitycontinuation": {
        "apps": [
            "YOUR_APP_PREFIX.de.company.app"
        ]
   },
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "YOUR_APP_PREFIX.de.company.app",
        "paths": ["/*"]
      }
    ]
  }
} 

อีกสิ่งหนึ่งที่ฉันพบในระหว่างการเดินทางในนรกคือการลบแอพและรีสตาร์ทอุปกรณ์ดูเหมือนจะเป็นวิธีเดียวที่จะบังคับให้รีเฟรชไฟล์นี้


1

สำหรับฉันข้อผิดพลาดของฉันคือไซต์ของเรากำลังเปลี่ยนเส้นทาง www.domain.com ไปยัง domain.com ดังนั้น www.domain.com/* ทั้งหมดจะล้มเหลวเพราะเหตุนี้ หวังว่าจะช่วยได้


1

ฉันสามารถทดสอบ Universal Links ใน iOS Simulator ได้โดยใช้แอปปฏิทิน

ฉันเพิ่งสร้างกิจกรรมและเพิ่ม URL ที่ต้องการทดสอบในURLฟิลด์ของกิจกรรม จากนั้นเมื่อดูเหตุการณ์ที่สร้างขึ้นคุณสามารถแตะที่ลิงค์ URL จากนั้นแอปของคุณจะเปิดขึ้น


ดูเหมือนจะไม่ได้ผลสำหรับฉันฉันพยายามทุกอย่างแล้วเพื่อให้พวกเขาทำงานในโปรแกรมจำลองโดยไม่เกิดประโยชน์ ทำงานได้ดีบนอุปกรณ์จริง แต่ไม่เหมาะสำหรับการพัฒนา / แก้ไขข้อบกพร่อง ฉันลองกดลิงค์มานานแล้วและไม่มีตัวเลือก "เปิดในแอป"
chib

1

หลังจากใช้เวลาหนึ่งวันในการพยายามทำให้สิ่งนี้ใช้งานได้การรีสตาร์ทโทรศัพท์ของฉันช่วยแก้ปัญหาได้

การถอนการติดตั้ง / การติดตั้งแอปใหม่ก็ไม่ได้ผลเช่นกัน


1

สำหรับ ios13 มีรูปแบบใหม่ - ดูที่นี่https://developer.apple.com/documentation/safariservices/supporting_associated_domains_in_your_app?language=objc

ฉันอัปเดตไฟล์ของฉันให้มีลักษณะดังนี้:

{
  "applinks": {
      "details": [
           {
             "appIDs": [ "ABCDE12345.com.example.app" ],
             "components": [
               {
                  "/": "/my-link/*",
                  "exclude": true,
                  "comment": "Matches any URL whose path starts with /my-link/ and instructs the system not to open it as a universal link"
               }
             ]
           }
       ]
   },
   "webcredentials": {
      "apps": [ "ABCDE12345.com.example.app" ]
   }
}

คุณต้องเพิ่ม"exclude": trueในcomponentsวัตถุเพื่อให้commentเป็นจริง
skornos

0

สำหรับผู้อ่านในอนาคตที่พบหน้านี้ ...

ฉันมีสถานการณ์ที่คล้ายกัน อย่างไรก็ตามในสถานการณ์ของฉัน iOS10 ใช้งาน AOK ได้และไม่ว่าฉันจะทำอะไร (ตัวเลขการสร้างการชนลบ / ติดตั้งใหม่ ฯลฯ ) ดูเหมือนว่า iOS9 จะปฏิเสธที่จะทำงาน

ฉันมาถึงสิ่งนี้จาก iOS10 และจำเป็นต้องรองรับ iOS9 ในขณะนั้นเอกสารประกอบที่นี่ - https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html - ระบุอย่างชัดเจนว่าไฟล์อาจถูกวางไว้ที่รากของเว็บเซิร์ฟเวอร์ (เช่น/apple-app-site-association) หรือในโฟลเดอร์. ที่รู้จักกันดี (เช่น/.well-known/apple-app-site-association ) เนื่องจากฉันรองรับ Android ซึ่งใช้โฟลเดอร์. ที่รู้จักกันดีสำหรับไฟล์ที่คล้ายกันด้วยฉันจึงตัดสินใจใส่ทั้งสองอย่างไว้ที่นั่น

สำหรับการติดตั้งใหม่บน iOS10 จะขอไฟล์รูทอย่างชัดเจนล้มเหลวจากนั้นขอไฟล์. ที่รู้จักกันดีและประสบความสำเร็จ

สำหรับ iOS9 มันร้องขอไฟล์รูทอย่างชัดเจนล้มเหลวและไม่ทำอะไรเลย

วิธีแก้ไข: หากคุณรองรับ iOS9 ให้วางไฟล์ที่/apple-app-site-association.


0

ในกรณีของฉันข้อผิดพลาดของฉันคือการใส่พารามิเตอร์การค้นหาในเส้นทาง:

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "TEAM_ID.BundleIdentifier",
                "paths": [ "/auth-ui/hub?target=confirm&*" ]
            }
        ]
    }
}

เมื่อฉันลบ '? target = confirm & *' ออกจากเส้นทางมันจะเริ่มทำงาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.