เป็นไปได้หรือไม่ที่จะลงทะเบียน http + โดเมน URL ตามโครงการสำหรับแอพของ iPhone เช่น YouTube และ Maps


223

ฉันต้องการให้ iOS เปิด URL จากโดเมนของฉัน (เช่นhttp://martijnthe.nl ) กับแอพของฉันทุกครั้งที่มีการติดตั้งแอปบนโทรศัพท์และใช้ Mobile Safari ในกรณีที่ไม่ใช่

ฉันอ่านมันเป็นไปได้ที่จะสร้างคำต่อท้ายโปรโตคอลที่ไม่ซ้ำกันสำหรับสิ่งนี้และลงทะเบียนใน Info.plist แต่ Mobile Safari จะให้ข้อผิดพลาดในกรณีที่ไม่ได้ติดตั้งแอพ

อะไรจะเป็นการแก้ปัญหา?

แนวคิดหนึ่ง:

1) ใช้ http: // URL ที่เปิดในเบราว์เซอร์เดสก์ท็อปใด ๆ และแสดงผลบริการผ่านเบราว์เซอร์

2) ตรวจสอบ User-Agent และในกรณีที่เป็น Mobile Safari ให้เปิด myprotocol: // URL ไปที่ (พยายาม) เพื่อเปิดแอพ iPhone และให้เปิด Mobile iTunes เพื่อดาวน์โหลดแอปในกรณีที่ความพยายามล้มเหลว

ไม่แน่ใจว่าจะใช้งานได้หรือไม่ ... คำแนะนำ? ขอบคุณ!


4
ในสถานีรถไฟใต้ดิน NYC มี wifi โดย Boingo ซึ่งให้คุณสามารถเข้าถึง WiFi ได้ฟรีหากคุณดาวน์โหลดแอปพลิเคชันที่พวกเขาแนะนำ เมื่อคุณดาวน์โหลดแล้วคุณจะกลับไปที่ Safari และเบราว์เซอร์ตรวจพบว่าติดตั้งแล้วและให้สิทธิ์การเข้าถึงแก่คุณ ความคิดใด ๆ ที่กำลังทำอยู่?
TommyG

2
Universal Links จะสนับสนุนกรณีการใช้งานนี้โดยไม่มีข้อความแสดงข้อผิดพลาด ต่อไปนี้เป็นวิธีกำหนดค่าโดเมนและแอปของคุณ: blog.branch.io/…
Alex Austin

คำตอบ:


243

ฉันคิดว่าวิธีที่รบกวนน้อยที่สุดในการทำเช่นนี้คือ:

  1. ตรวจสอบว่าตัวแทนผู้ใช้เป็นของ iPhone / iPod Touch
  2. ตรวจสอบappInstalledคุกกี้
  3. หากคุกกี้มีอยู่และตั้งค่าเป็นจริงให้ตั้งค่าwindow.locationเป็นyour-uri://(หรือทำฝั่งเซิร์ฟเวอร์เปลี่ยนเส้นทาง)
  4. หากไม่มีคุกกี้ให้เปิด "คุณรู้หรือไม่ว่าชื่อไซต์ของคุณมีแอปพลิเคชัน iPhone" เป็นกิริยาช่วยด้วยปุ่ม "ใช่ฉันได้รับแล้ว", "ไม่ แต่ฉันชอบที่จะลอง" และปุ่ม "ทิ้งฉันไว้คนเดียว"
    1. ปุ่ม "อ๋อ" ตั้งค่าคุกกี้เป็นจริงและเปลี่ยนเส้นทางไป your-uri://
    2. ปุ่ม "Nope" เปลี่ยนเส้นทางไปที่ " http://itunes.com/apps/yourappname " ซึ่งจะเปิด App Store บนอุปกรณ์
    3. ปุ่ม "ทิ้งฉันไว้คนเดียว" ตั้งค่าคุกกี้เป็นเท็จและปิดคำกริยา

ตัวเลือกอื่นที่ฉันได้เล่นด้วย แต่พบว่ามี clunky เล็กน้อยที่ต้องทำใน Javascript:

setTimeout(function() {
  window.location = "http://itunes.com/apps/yourappname";
}, 25);

// If "custom-uri://" is registered the app will launch immediately and your
// timer won't fire. If it's not set, you'll get an ugly "Cannot Open Page"
// dialogue prior to the App Store application launching
window.location = "custom-uri://";

16
ทางออกที่ดี หากทางเลือกของคุณเป็นแอปพลิเคชันอื่นมันจะโหลดทันทีโดยไม่แสดงข้อผิดพลาด ดังนั้นแทนที่จะกลับไปที่itunes.com ... ใช้ itms: //phobos.apple.com / ... เพื่อหลีกเลี่ยงข้อผิดพลาดป๊อปอัป!
jb

47
ปัญหา : เมื่อwindow.location="custom-uri://สำเร็จการหมดเวลาสำรองจะไม่ถูกฆ่า เมื่อผู้ใช้กลับสู่เบราว์เซอร์จากแอพของคุณตัวจับเวลายังคงอยู่ที่นั่นและจะเปิดลิงก์ของร้านแอป นี่คือประสบการณ์การใช้งานที่ไม่ดี
JoJo

5
ดูเหมือนว่าคุกกี้จะถูก Sandbox ใน # ios6 ดังนั้นคุณจึงไม่สามารถเข้าถึงคุกกี้ที่กำหนดโดยแอปพลิเคชันจากที่อื่น (ตัวอย่างเช่นแอป WebUI และ Safari มือถือ)
Olivier Amblet

2
มีวิธีใดที่จะป้องกันไม่ให้การหมดเวลาดั้งเดิมเริ่มต้นเมื่อผู้ใช้กลับมาที่เบราว์เซอร์ (ปัญหาที่ยกมา JoJo กล่าวถึง)
cobolstinks

2
เพื่อแก้ปัญหาที่ JoJo กล่าวถึงให้เรียกใช้รหัสในการหมดเวลาหากไม่ผ่าน "เวลามาก" นับตั้งแต่ผู้ใช้คลิกที่ลิงค์ ดูโซลูชันนี้: stackoverflow.com/a/14751543/533420
kkara

95

เป็นไปได้ค่อนข้างที่จะทำสิ่งนี้ใน JavaScript ตราบใดที่ทางเลือกของคุณเป็น applink อีกอัน การสร้างตามคำแนะนำของนาธาน :

<html>
  <head>
    <meta name="viewport" content="width=device-width" />
  </head>
  <body>

    <h2><a id="applink1" href="fb://profile/116201417">open facebook with fallback to appstore</a></h2>
    <h2><a id="applink2" href="unknown://nowhere">open unknown with fallback to appstore</a></h2>
    <p><i>Only works on iPhone!</i></p>    

  <script type="text/javascript">

// To avoid the "protocol not supported" alert, fail must open another app.
var appstorefail = "itms://itunes.apple.com/us/app/facebook/id284882215?mt=8&uo=6";

function applink(fail){
    return function(){
        var clickedAt = +new Date;
        // During tests on 3g/3gs this timeout fires immediately if less than 500ms.
        setTimeout(function(){
            // To avoid failing on return to MobileSafari, ensure freshness!
            if (+new Date - clickedAt < 2000){
                window.location = fail;
            }
        }, 500);    
    };
}

document.getElementById("applink1").onclick = applink(appstorefail);
document.getElementById("applink2").onclick = applink(appstorefail);

</script>
</body>
</html>

ตรวจสอบการสาธิตสดที่นี่


7
เห็นด้วยกับลีดูเหมือนว่าจะเป็นวิธีการแก้ปัญหาที่ตรงไปตรงมามากกว่า - แม้ว่าฉันจะยังได้รับข้อความแสดงข้อผิดพลาดจากซาฟารีหากไม่มีแอพอยู่
Jon

2
ฉันใช้โซลูชันนี้สำหรับทั้ง Android และ iOS ฉันพบว่าฉันเปลี่ยนค่าการหมดเวลาจาก 500 เป็น 100 ฉันไม่ได้รับกล่องโต้ตอบป๊อปอัป "ไม่สามารถเปิดหน้า" ใน iOS ฉันยังพบว่าการหมดเวลาต้องเป็น 50 สำหรับ Android
Rossini

14
การใช้ "itms-apps:" แทนที่จะเป็น "itms:" จะบันทึก 1 การเปลี่ยนเส้นทางและเปิดหน้าแอพใน appstore โดยตรง
Latorre เยอรมัน

6
@Rossini นี้ถูกสร้างขึ้นใน Android โดยการตั้งค่าตัวกรองความตั้งใจการทำงานของคุณที่ตอบสนองต่อโฮสต์เฉพาะ
jwadsack

9
ไม่มีใครรู้วิธีหลีกเลี่ยงข้อความแสดงข้อผิดพลาด "ไม่สามารถเปิดหน้าเว็บ" จากซาฟารีหากยังไม่ได้ติดตั้งแอปและก่อนที่จะเปลี่ยนเส้นทางไปยังร้านค้าแอป
davidk

26

สำหรับอุปกรณ์ iOS 6 มีตัวเลือกคือ: การโปรโมตแอปด้วย Smart App Banners


12
Sadly Smart App Banner รองรับ Mobile Safari เท่านั้นไม่ใช่ UIWebviewComponent ดังนั้นมันจะไม่ปรากฏหากไซต์ของคุณปรากฏภายในไคลเอนต์ Twitter เพื่อเป็นตัวอย่าง
Olivier Amblet

24

ผมพบว่าคำตอบที่เลือกทำงานสำหรับแอพพลิเคเบราว์เซอร์ UIWebViewแต่ผมมีปัญหาเกี่ยวกับรหัสที่ทำงานในเบราว์เซอร์ที่ไม่ใช่ปพลิเคชันที่ใช้

ปัญหาสำหรับฉันคือผู้ใช้ในแอพ Twitter จะคลิกลิงค์ที่จะนำพวกเขาไปยังเว็บไซต์ของฉันผ่านทางUIWebViewในแอพ Twitter จากนั้นเมื่อพวกเขาคลิกปุ่มจากเว็บไซต์ของฉัน Twitter พยายามที่จะเป็นแฟนซีและสมบูรณ์window.locationถ้าเว็บไซต์นั้นสามารถเข้าถึงได้ ดังนั้นสิ่งที่จะเกิดขึ้นก็คือการUIAlertViewพูดปรากฏขึ้นคุณแน่ใจหรือไม่ว่าต้องการดำเนินการต่อจากนั้นจะเปลี่ยนเส้นทางไปยัง App Store ทันทีโดยไม่ต้องมีป๊อปอัปสำรอง

โซลูชันของฉันเกี่ยวข้องกับ iframes เพื่อหลีกเลี่ยงการUIAlertViewถูกนำเสนอเพื่อให้ประสบการณ์การใช้งานที่ง่ายและสง่างาม

jQuery

var redirect = function (location) {
    $('body').append($('<iframe></iframe>').attr('src', location).css({
        width: 1,
        height: 1,
        position: 'absolute',
        top: 0,
        left: 0
    }));
};

setTimeout(function () {
    redirect('http://itunes.apple.com/app/id');
}, 25);

redirect('custom-uri://');

จาวาสคริ

var redirect = function (location) {
    var iframe = document.createElement('iframe');
    iframe.setAttribute('src', location);
    iframe.setAttribute('width', '1px');
    iframe.setAttribute('height', '1px');
    iframe.setAttribute('position', 'absolute');
    iframe.setAttribute('top', '0');
    iframe.setAttribute('left', '0');
    document.documentElement.appendChild(iframe);
    iframe.parentNode.removeChild(iframe);
    iframe = null;
};

setTimeout(function () {
    redirect('http://itunes.apple.com/app/id');
}, 25);

redirect('custom-uri://');

แก้ไข:

เพิ่มตำแหน่งที่แน่นอนให้กับ iframe ดังนั้นเมื่อแทรกแล้วจะไม่มีช่องว่างสุ่มที่ด้านล่างของหน้า

นอกจากนี้ยังเป็นสิ่งสำคัญที่จะต้องทราบว่าฉันไม่พบความต้องการวิธีการนี้กับ Android การใช้window.location.hrefควรจะทำงานได้ดี


1
มันได้ผล!! ขอบคุณในที่สุดฉันก็พบวิธีแก้ปัญหาที่ทำงานบนทุกเบราว์เซอร์
koleror

2
นี่คือทางออกที่ดีที่สุดหากพบ ขอบคุณ. ไม่มีข้อผิดพลาดป๊อปอัพอีกต่อไป
Confile

1
@Tim หากคุณต้องการให้โค้ดนี้ทำงานเมื่อมีการคลิกลิงก์ให้ตัดคำนี้ในฟังก์ชั่นที่เรียกว่าเมื่อคลิกที่ลิงค์
cnotethegr8

1
@ cnotethegr8 ฉันใส่ในฟังก์ชั่นและเปลี่ยนเส้นทางไปยัง URL ที่กำหนดเองทำงานได้ดี แต่การถอยกลับไปยัง iTunes ไม่ได้ นี่คือฉันรหัส ฉันพลาดอะไรไป
ทิม

1
มีคนอื่นมีปัญหากับเรื่องนี้ใน iOS 9 มันใช้งานไม่ได้กับฉันใน Safari
bgolson

20

ใน iOS9 แอปเปิ้ลในที่สุดก็แนะนำให้รู้จักความเป็นไปได้ในการลงทะเบียนของแอปที่จะจัดการกับบางhttp://URL ที่: ยูนิเวอร์แซลิงก์

คำอธิบายคร่าวๆว่ามันทำงานอย่างไร:

  • คุณประกาศความสนใจในการเปิดhttp://URL สำหรับบางโดเมน (URL ของเว็บ) ในแอปของคุณ
  • บนเซิร์ฟเวอร์ของโดเมนที่ระบุคุณต้องระบุว่า URL ใดที่จะเปิดในแอพที่ได้ประกาศความสนใจในการเปิด URL จากโดเมนของเซิร์ฟเวอร์
  • บริการโหลด URL ของ iOS จะตรวจสอบความพยายามทั้งหมดในการเปิดhttp://URL สำหรับการตั้งค่าตามที่อธิบายไว้ข้างต้นและเปิดแอปที่ถูกต้องโดยอัตโนมัติหากติดตั้ง โดยไม่ต้องผ่าน Safari ก่อน ...

นี่เป็นวิธีที่สะอาดที่สุดในการเชื่อมโยงลึกลงไปบน iOS โชคไม่ดีที่มันทำงานเฉพาะใน iOS9 และใหม่กว่า ...


และมันจะไม่ทำงานภายในเบราว์เซอร์ ... ภายนอกเท่านั้นเช่นจาก imessage หรือโน้ต
Mihey Mik

9

การสร้างอีกครั้งกับคำตอบของ Nathan และ JB:

วิธีการเปิดแอปจาก url โดยไม่มีการคลิกเพิ่ม หากคุณต้องการโซลูชันที่ไม่มีขั้นตอนชั่วคราวในการคลิกลิงค์สามารถใช้สิ่งต่อไปนี้ได้ ด้วยจาวาสคริปต์นี้ฉันสามารถส่งคืนวัตถุ Httpresponse จาก Django / Python ที่เปิดใช้แอปได้สำเร็จหากติดตั้งหรือเปิดใช้งานแอปสโตร์ในกรณีที่หมดเวลา หมายเหตุฉันต้องปรับระยะหมดเวลาจาก 500 เป็น 100 เพื่อให้สิ่งนี้ทำงานบน iPhone 4S ทดสอบและปรับแต่งเพื่อให้ตรงกับสถานการณ์ของคุณ

<html>
<head>
   <meta name="viewport" content="width=device-width" />
</head>
<body>

<script type="text/javascript">

// To avoid the "protocol not supported" alert, fail must open another app.
var appstorefail = "itms://itunes.apple.com/us/app/facebook/id284882215?mt=8&uo=6";

var loadedAt = +new Date;
setTimeout(
  function(){
    if (+new Date - loadedAt < 2000){
      window.location = appstorefail;
    }
  }
,100);

function LaunchApp(){
  window.open("unknown://nowhere","_self");
};
LaunchApp()
</script>
</body>
</html>

9
window.location = appurl;// fb://method/call..
!window.document.webkitHidden && setTimeout(function () {
    setTimeout(function () {
    window.location = weburl; // http://itunes.apple.com/..
    }, 100);
}, 600);

document.webkitHidden ตรวจสอบว่าแอปของคุณถูกเรียกใช้แล้วและแท็บซาฟารีปัจจุบันไปที่พื้นหลังหรือไม่รหัสนี้มาจาก www.baidu.com


ฉันทดสอบวิธีการแก้ปัญหานี้และพบว่าขณะที่มันส่งเหตุการณ์ได้อย่างถูกต้องกล่องโต้ตอบข้อผิดพลาด "Safari ไม่สามารถเปิดหน้านี้ได้เนื่องจากที่อยู่ไม่ถูกต้อง" ปรากฏขึ้นชั่วขณะ (มันจะหยุดการทำงานอัตโนมัติหลังจากเสี้ยววินาที)
michaelhanson

ใช้ iframe เพื่อโหลดappurlและweburlสามารถแก้ปัญหาของคุณได้
zyanlu

1
@zyanlu: ฉันได้ลองกับ iFrame แล้ว bt ยังคงซาฟารีแสดงข้อผิดพลาดเดียวกัน
kunjus

5

หากคุณเพิ่มiframeในหน้าเว็บของคุณด้วยsrcชุดรูปแบบที่กำหนดเองสำหรับแอพของคุณ iOS จะเปลี่ยนเส้นทางไปยังตำแหน่งนั้นในแอปโดยอัตโนมัติ หากไม่ได้ติดตั้งแอพจะไม่มีอะไรเกิดขึ้น สิ่งนี้ช่วยให้คุณสามารถเชื่อมโยงลึกเข้าไปในแอพได้หากมีการติดตั้งหรือเปลี่ยนเส้นทางไปที่ App Store หากยังไม่ได้ติดตั้ง

ตัวอย่างเช่นหากคุณติดตั้งแอป Twitter และไปที่หน้าเว็บที่มีมาร์กอัปต่อไปนี้คุณจะถูกนำไปยังแอปทันที

<!DOCTYPE html>
<html>
    <head>
    <title>iOS Automatic Deep Linking</title>
    </head>
    <body>
        <iframe src="twitter://" width="0" height="0"></iframe>
        <p>Website content.</p>
    </body>
</html>

นี่คือตัวอย่างที่ละเอียดยิ่งขึ้นที่เปลี่ยนเส้นทางไปที่ App store หากไม่ได้ติดตั้งแอพ:

<!DOCTYPE html>
<html>
    <head>
    <title>iOS Automatic Deep Linking</title>
    <script src='//code.jquery.com/jquery-1.11.2.min.js'></script>
    <script src='//mobileesp.googlecode.com/svn/JavaScript/mdetect.js'></script>
    <script>
      (function ($, MobileEsp) {
        // On document ready, redirect to the App on the App store.
        $(function () {
          if (typeof MobileEsp.DetectIos !== 'undefined' && MobileEsp.DetectIos()) {
            // Add an iframe to twitter://, and then an iframe for the app store
            // link. If the first fails to redirect to the Twitter app, the
            // second will redirect to the app on the App Store. We use jQuery
            // to add this after the document is fully loaded, so if the user
            // comes back to the browser, they see the content they expect.
            $('body').append('<iframe class="twitter-detect" src="twitter://" />')
              .append('<iframe class="twitter-detect" src="itms-apps://itunes.com/apps/twitter" />');
          }
        });
      })(jQuery, MobileEsp);
    </script>
    <style type="text/css">
      .twitter-detect {
        display: none;
      }
    </style>
    </head>
    <body>
    <p>Website content.</p>
    </body>
</html>

ปัญหาเกี่ยวกับตัวอย่างแรกของคุณคือถ้าคุณกลับไปที่ Mobile Safari มันจะแสดง "แอพ Twitter ไม่ได้ติดตั้ง" แม้ว่าจะเปิดตัว Twitter แล้วก็ตาม เช่นเดียวกับตัวอย่างที่สองที่แสดง "เนื้อหาเว็บไซต์" ต้องมีรหัสที่ทำสิ่งที่แตกต่าง (โหลด URL อื่นหรือแสดงข้อความหนึ่งในสองข้อความ) หากติดตั้งแอป
mahboudz

1
ใช่ @mahboudz หากคุณอ่านข้อความเป็นเพียงตัวอย่างง่ายๆที่แสดงว่าเป็นไปได้ที่จะเปลี่ยนเส้นทางไปยังแอปโดยอัตโนมัติ
q0rban

จากนั้นฉันจะติดตามตัวอย่างที่ละเอียดยิ่งขึ้นซึ่งจะแสดงเนื้อหาของเว็บไซต์จริง ฉันสามารถลบข้อความ "ไม่ได้ติดตั้งแอพ Twitter" หากจะทำให้ชัดเจนยิ่งขึ้น
q0rban

iOS 6 ยังคง displayes ป๊อปอัพที่หน้าไม่สามารถเปิดได้เพราะ URL ไม่ถูกต้อง
อังเดร Shender

@AndreiShender นี่คือสถิติการใช้งาน iOS ในขณะที่เขียนนี้: monosnap.com/image/8eXUcpEUi8fm94DiMZIdiIp4xUNaln.png iOS 8: 72%, iOS 7: 25%, รุ่นก่อนหน้า: 3%
q0rban

4

นี่เป็นวิธีแก้ปัญหา

ตั้งค่า sitiation บูลีนโดยใช้เบลอและโฟกัส

//see if our window is active
window.isActive = true;
$(window).focus(function() { this.isActive = true; });
$(window).blur(function() { this.isActive = false; });

ผูกลิงค์ของคุณด้วยตัวจัดการการคลิก jquery ที่เรียกสิ่งนี้

function startMyApp(){
  document.location = 'fb://';

  setTimeout( function(){
    if (window.isActive) {
        document.location = 'http://facebook.com';
    }
  }, 1000);
}

หากแอปเปิดขึ้นเราจะไม่โฟกัสที่หน้าต่างและตัวจับเวลาจะสิ้นสุดลง ไม่เช่นนั้นเราจะไม่ได้อะไรเลยและเราก็โหลด url Facebook ตามปกติ


ขอบคุณมากสำหรับคำแนะนำ ฉันกำลังประสบปัญหาว่าบทสนทนา "เรียกใช้งานภายนอกแอปพลิเคชัน" ดูเหมือนจะเพียงพอสำหรับความพร่ามัวที่จะปิดการใช้งานธง สิ่งนี้จะเกิดขึ้นแม้ว่าจะไม่ได้ติดตั้งแอพ (เช่นเมื่อคลิกที่ลิงค์เพื่อเปิดแอพ iPhone บนเดสก์ท็อป) ไอเดีย?
fluxon

2

เท่าที่ฉันรู้คุณไม่สามารถทำให้ระบบปฏิบัติการทั้งหมดเข้าใจhttp:+ โดเมน URL คุณสามารถลงทะเบียนแผนใหม่เท่านั้น (ฉันใช้x-darkslide:ในแอพของฉัน) หากติดตั้งแอพแล้ว Mobile Safari จะเปิดใช้งานแอปได้อย่างถูกต้อง

อย่างไรก็ตามคุณจะต้องจัดการกับกรณีที่ไม่ได้ติดตั้งแอพด้วย "ยังอยู่ที่นี่หรือคลิกที่ลิงค์นี้เพื่อดาวน์โหลดแอพจาก iTunes" ในหน้าเว็บของคุณ


2
นี้ไม่ถูกต้อง: มี iOS9 และรุ่นล่าสุด Android คุณสามารถลงทะเบียนแอปของคุณจะฟังสำหรับบางhttpURL ที่
SEVERIN

0

ตรวจสอบ User-Agent และในกรณีที่เป็น Mobile Safari ให้เปิด myprotocol: // URL ไปที่ (พยายาม) เพื่อเปิดแอพ iPhone และให้เปิด Mobile iTunes เพื่อดาวน์โหลดแอพในกรณีที่ความพยายามล้มเหลว

นี่เป็นวิธีการที่สมเหตุสมผลสำหรับฉัน แต่ฉันไม่คิดว่าคุณจะสามารถเปิด itunes มือถือเป็นทางเลือกที่สองได้ ฉันคิดว่าคุณจะต้องเลือกอย่างใดอย่างหนึ่ง - ไม่ว่าจะเปลี่ยนเส้นทางไปที่แอพของคุณหรือ iTunes

เช่นหากคุณเปลี่ยนเส้นทางไปที่ myprotocol: // และแอปไม่ได้อยู่ในโทรศัพท์คุณจะไม่ได้รับโอกาสที่สองในการเปลี่ยนเส้นทางไปยัง iTunes

คุณสามารถเปลี่ยนเส้นทางไปยังหน้า Landing Page (ปรับให้เหมาะกับ iPhone) แล้วให้ผู้ใช้มีตัวเลือกให้คลิกผ่านแอพของคุณหรือไปที่ iTunes เพื่อรับแอพหากไม่มี แต่คุณจะต้องพึ่งพาผู้ใช้ในการทำสิ่งที่ถูกต้องที่นั่น (แก้ไข: แม้ว่าคุณสามารถตั้งค่าคุกกี้เพื่อให้เป็นครั้งแรกเท่านั้น)


1
นั่นเป็นสิ่งที่ผิด หากมีข้อผิดพลาดแสดงว่าไม่สามารถเปิดหน้าได้ (ไม่ได้ติดตั้งแอป) แสดงว่า JS ยังคงทำงานอยู่ นั่นเป็นเหตุผลที่คุณสามารถเปลี่ยนเส้นทางไปยังโซลูชันสำรองอื่นได้
Erik

0

ในการค้นหาเพื่อแก้ไขปัญหาของป๊อปอัปฉันพบว่า Apple มีวิธีแก้ไขปัญหานี้

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


3
ฉันขุดลึกลงไปถึงวิธีการทำงานของลิงก์และสิ่งที่ดีที่สุดที่ฉันสามารถทำได้คือมันไม่ใช่โซลูชัน JavaScript เลย Apple ดูเหมือนจะลงทะเบียนตัวจัดการ URL พิเศษสำหรับแอปของพวกเขาที่ไม่ต้องการโปรโตคอลที่กำหนดเองและแทนที่จะจับคู่กับสตริง URL แทน การเชื่อมโยงที่คุณส่งการเปลี่ยนเส้นทางทันทีกับ 303 ที่นี่ หากคุณส่งลิงค์นั้นไปยังอีเมลด้วยตัวคุณเองคุณสามารถสังเกตได้ว่าการคลิกที่ลิงค์นั้นจะนำแอพ AppStore ขึ้นมาโดยตรงหากติดตั้งแล้ว
Casey

น่าสนใจมาก. คุณพูดถูก: ถ้าฉันคลิกมันมันจะแสดงแอพ AppStore ถ้าติดตั้ง แต่ถ้าคุณลบพารามิเตอร์บางอย่างจนกระทั่ง "holydays" มันจะปรากฏขึ้นภายใน Safari Apple สามารถลงทะเบียนชุด URL พิเศษ ...
Titignes

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