Pertanyaan Tidak dapat memperoleh AppLinks baru untuk berfungsi di iOS atau Android


Pembaruan Terbaru Di Bawah ini di Pembaruan # 5

Saya mencoba menerapkan AppLinks untuk KEDUA iOS dan aplikasi Android saya: http://applinks.org

Saya sudah melakukan yang berikut:

  1. menyiapkan skema url khusus untuk aplikasi saya: inacho: //
  2. Pengaturan di Delegasi Aplikasi saya: - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
  3. Tambahkan tag meta ke situs web saya di http://www.nachorater.com :

<meta property="al:ios:app_store_id" content="581815579"/>
<meta property="al:ios:app_name" content="iNacho" />
<meta property="al:ios:url" content="inacho://default" />

Saya telah memverifikasi bahwa skema url berfungsi dengan baik dengan mengetik tautan seperti inacho: // default ke dalam Notes dan mengklik tautan yang dibuatnya. Wa-la! Ini membuka aplikasi saya.

Tetapi ketika saya mencoba mengklik tautan ke www.nachorater.com dari Facebook atau Quip, tidak ada aplikasi yang secara otomatis tampaknya memperhatikan bahwa situs tersebut memiliki tautan aplikasi ini dan hanya memuat situs web di browser mereka (s) daripada mencoba untuk membuka aplikasi saya.

Adakah yang punya ini bekerja?

Memperbarui:

Saya memiliki masalah dengan beberapa meta tag tidak berada di bagian <head> dari template saya dan saya memperbaikinya.

Sekarang tautannya: http://www.nachorater.com dari aplikasi Facebook iOS menambahkan popup kecil yang bagus yang memungkinkan Anda membuka url di aplikasi iNacho seperti:

screenshot

Tetapi tautan saya ke tinjauan dinamis saya sepertinya tidak berfungsi, namun aplikasi Debug yang ditunjukkan oleh Ming menunjukkan bahwa meta tag terlihat benar untuk mereka.

Sebagai contoh, http://www.nachorater.com/getReview?reviewID=6396169718595584

meta tag saat debugging dengan https://developers.facebook.com/tools/debug/og/object?q=http%3A%2F%2Fwww.nachorater.com%2FgetReview%3FreviewID%3D6396169718595584 :

meta tags

Perbarui # 2:

Saya memposting tautan ulasan nacho baru ke garis waktu Facebook iNacho saya dan kemudian mencoba mengkliknya dari aplikasi Facebook Mobile.

Ini mulai memuat halaman dan muncul indikator berguna yang memungkinkan Anda membuka aplikasi di iNacho tetapi kemudian setelah halaman dimuat, indikator pergi (sebelum saya bisa mengkliknya).

Perbarui # 3:

Dari aplikasi Facebook, saya sekarang dapat memicu URL inacho untuk ulasan saya, tetapi hanya jika saya mengklik popup kecil untuk membuka di iNacho sebelum menghilang. Jika saya membiarkan halaman sepenuhnya dimuat di tampilan web bawaan Facebook, popup kecil itu akan hilang.

Apakah ini masalah dengan Applinks? Atau masalah dengan aplikasi Facebook? Atau dengan desain dan mengapa?

Pembaruan # 4:

Saya mungkin tahu apa masalahnya. Halaman review pada gilirannya memuat gambar dinamis untuk ulasan nacho. Jadi dengan memuat halaman, ia memiliki tag img src yang mengarah ke url dinamis yang memuat gambar. Apakah ini disalahartikan sebagai tindakan 'pengalihan'?

Contoh img tag (diberikan): <img width="300" src="/getReviewImage?imageID=6125868501958656"></img>

Catatan: Ada banyak skrip lain / ajax yang dimuat secara dinamis juga (Facebook dan twitter widget dan sejenisnya).

Apakah ini bug di AppLinks atau aplikasi Facebook Mobile? Bukankah seharusnya tidak peduli tentang memuat objek latar belakang seperti ajax dan gambar dinamis?

Perbarui # 5

7/15/14 - Ini masih terjadi dengan aplikasi Facebook terbaru. Ketika saya mengklik tautan dari halaman Facebook iNacho saya ke situs web iNacho saya, itu muncul pilihan untuk membukanya di aplikasi untuk sepersekian detik sebelum halaman selesai memuat. Lalu dia menyembunyikannya.

Adapun aplikasi twitter, itu bahkan tidak memberi saya popup untuk sepersekian detik. Sepertinya tidak mengenali tautan yang diaktifkan tautan aplikasi sama sekali.

Quip di sisi lain, saya menempelkan tautan nacho dan pertama kali saya mengekliknya, ia masuk ke safari yang ada di dalamnya tanpa opsi untuk membuka di aplikasi saya. TAPI kedua kalinya saya mengkliknya, langsung membuka aplikasi saya sebagai gantinya.

Ringkasan: Sejauh ini, sepertinya beberapa aplikasi mengimplementasikan bagian Navigasi AppLinks secara salah atau sesuatu. Quip tampaknya berfungsi tetapi bahkan aplikasi Facebook sendiri sepertinya tidak berfungsi.


32
2018-05-09 07:45


asal


Jawaban:


Saya mengalami masalah yang sama dengan AppLinks dan memutuskan untuk mengabaikannya sama sekali dan hanya menggunakan host tautan aplikasi facebook: https://developers.facebook.com/docs/applinks/hosting-api

Aplikasi saya benar-benar hanya seluler, dan saya salah memahami cara kerja AppLinks pada awalnya. Saya pikir saya bisa meletakkannya al_ios_* meta tag pada satu halaman web universal tetapi ini salah. Perlu ada halaman terpisah untuk setiap bagian konten di situs saya, dan masing-masing dari halaman tersebut harus memiliki tag meta AppLinks sendiri untuk mengirim URL untuk konten khusus itu kembali ke aplikasi saya.

Ketika saya melakukan kesalahan, ketika saya mengetuk cerita OpenGraph saya di facebook, itu akan membuka situs saya di browser web dan ada ikon aksi di toolbar bawah yang dapat saya ketuk dan memiliki opsi untuk membuka aplikasi saya. Atau saya harus mengetuk-ketikkan nama aplikasi saya dalam cerita OpenGraph. Salah satu dari mereka beralih cepat ke aplikasi saya, tetapi URL tidak akan spesifik untuk konten yang ingin navigasi aplikasi saya. Juga, kedua pilihan itu menghisap - Saya hanya ingin mengetuk di mana saja pada cerita dan langsung ke aplikasi saya, itulah mengapa kita semua ada di sini.

Solusinya

Saya akan menggunakan cerita OpenGraph dengan dialog share sebagai contoh.

Pertama, Anda perlu membuat tautan aplikasi yang dihosting di server Anda, bukan di aplikasi. Sebelum membuat cerita OpenGraph Anda atau apa pun yang dibagikan, lakukan panggilan ke server Anda untuk menyelesaikan 2 hal:

1.) Buat panggilan API untuk membuat tautan aplikasi facebook baru, yang akan mengembalikan ID Anda

2.) Gunakan ID tersebut untuk membuat panggilan API ke-2 untuk mendapatkan URL ke tautan aplikasi yang Anda hosting

Ini harus dilakukan pada server karena panggilan API ini memerlukan akses aplikasi token, bukan token akses pengguna. Token ini memiliki izin tingkat aplikasi, bukan izin tingkat pengguna. Anda tidak dapat dan tidak boleh menyimpan rahasia aplikasi facebook Anda di mana saja dalam aplikasi seluler Anda karena seseorang dapat mendekompilasi aplikasi Anda dan membuat perubahan pada aplikasi facebook Anda. Tidak baik. Gunakan server Anda karena dapat mengetahui rahasia aplikasi Anda dengan aman.

Sisi server saya di PHP jadi di sini adalah contoh bagaimana mencapai ini. Berurusan dengan API bukanlah pengalaman yang sangat menyenangkan, jadi saya akan berbagi dengan harapan bahwa itu membantu orang lain dengan memformat permintaan:

# create a new facebook app link using cURL
$metadata = <what to handle in AppDelegate application:openURL:sourceApplication:annotation>;
$url = "https://graph.facebook.com/v2.1/app/app_link_hosts";
$ch = curl_init($url);

# create form post data
$deepLinkURL = "<myApp>://" . $metadata;
$iosArray = json_encode(array(array("url"          => $deepLinkURL,
                                    "app_store_id" => <appStoreId (number)>,
                                    "app_name"     => "<myAppName>")
                              )
                       );
$webFallbackArray = json_encode(array("should_fallback" => false));

$formQuery = http_build_query(array("access_token" => "<appId>|<appSecret>",
                                    "name"         => $metadata,
                                    "ios"          => $iosArray,
                                    "web"          => $webFallbackArray)
                              );

# options
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $formQuery);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

# get response
$responseJson = curl_exec($ch);
curl_close($ch);

# decode response from facebook
$jsonResponse = json_decode($responseJson, true);
$appLinkId = "";

# get appLinkId
foreach ($jsonResponse as $key => $val) {

    # get status
    if($key == "id") {
        $appLinkId = $val;
    }
}

# if response is good, need to request canonical URL from appLinkId
$errorMessage = "";
$canonicalUrl = "";

if(!empty($appLinkId)) {

    # create another instance of cURL to get the appLink object from facebook using the ID generated by the previous post request
    $getAppLinkUrl = "https://graph.facebook.com/" . $appLinkId;
    $ch2 = curl_init();

    # cURL options
    $queryString = http_build_query(array("access_token" => "<appId>|<appSecret>",
                                          "fields"       => "canonical_url",
                                          "pretty"       => true)
                                    );
    curl_setopt($ch2, CURLOPT_URL, $getAppLinkUrl . "?" . $queryString);
    curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);

    # get response
    $urlResponseJson = curl_exec($ch2);
    curl_close($ch2);

    # decode response from facebook
    $urlJsonResponse = json_decode($urlResponseJson, true);

    # parse response to get canonical URL
    foreach ($urlJsonResponse as $key => $val) {
        # get canonical URL
        if($key == "canonical_url") {
            $canonicalUrl = $val;
        }
    }

    # check for result
    if(empty($canonicalUrl)) {
        $errorMessage = "Unable to retreive URL.";
    }

} else {
    $errorMessage = "Unable to publish appLink.";
}

# encode response back to your app
if(empty($errorMessage)) {
    $response = json_encode(array("result"        => "success",
                                  "canonical_url" => $canonicalUrl));
} else {
    $response = json_encode(array("result" => "failed",
                                  "errorMessage" => $errorMessage));
}

#send response back to your app

Kembali ke aplikasi Anda, setelah Anda mengkonfirmasi tanggapan yang baik, masukkan URL kanonis yang Anda dapatkan sebagai urlparameter dalam [FBGraphObject openGraphObjectForPostWithType: di bawah. Sekarang ketika Anda mengklik cerita Anda di aplikasi facebook, itu akan langsung ke aplikasi Anda. Tidak ada omong kosong di web.

// Create an action
id<FBOpenGraphAction> action = (id<FBOpenGraphAction>)[FBGraphObject graphObject];

// Create an object
id<FBGraphObject> object;

// set shareDialog parameters
FBOpenGraphActionParams *params = [[FBOpenGraphActionParams alloc] init];
params.action = action;
params.actionType = @"<myApp>:<myAction>";
params.previewPropertyName = @"<key>";
object = [FBGraphObject openGraphObjectForPostWithType:@"<myApp>:<myObject>"
                                                 title:<title>
                                                 image:<urlToPic>
                                                   url:<fb.me/xyz canonical URL>
                                           description:<someDescription>];

[action setObject:object forKey:@"<key>"];

etc...

8
2017-09-29 20:38



Ketika saya sedang mengerjakan aplikasi saya, Sapu, saya memasang dinding bayar / share setelah sejumlah waktu yang dihabiskan di aplikasi. Saya menghadapi masalah yang sama di mana AppLinks benar-benar terhisap untuk benar-benar menautkan Facebook, meskipun ada janji. Berdasarkan masalah ini, saya membangun sebuah layanan yang disebut branch.io yang menghosting tautan untuk saya, plus secara otomatis memasukkan metatag AppLinks yang benar untuk Android / iOS. Tautan itu benar-benar berfungsi seperti yang diharapkan, sama gilanya. Ini menggunakan kombinasi JS sisi klien dengan AppLinks untuk membuatnya redirect dengan benar di setiap tampilan web dan browser asli

Berikut adalah panduan tingkat tinggi untuk membuat tautan berbagi di iOS:

  1. Untuk memulai, Anda hanya perlu mengonfigurasi lokasi aplikasi Anda di salah satu toko di dasbor di dashboard.branch.io. Setelah semuanya siap, Anda mendapatkan kunci aplikasi Cabang Anda.

  2. pod "Branch" atau Anda dapat mengkloning repo open source di sini: https://github.com/BranchMetrics/Branch-iOS-SDK

  3. Tambahkan kunci Cabang ke file plist Anda sebagai String dengan kunci 'branch_key'

  4. Tambahkan kode berikut ke AppDelegate Anda dengan metode yang sesuai

Di dalam didFinishLaunchingWithOptions:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // your other init code
    Branch *branch = [Branch getInstance];
    [branch initSessionWithLaunchOptions:launchOptions andRegisterDeepLinkHandler:^(NSDictionary *params, NSError *error) {     // previously initUserSessionWithCallback:withLaunchOptions:
        if (!error) {
            // params are the deep linked params associated with the link that the user clicked before showing up
            // params will be empty if no data found

            // here is the data from the example below if a new user clicked on Joe's link and installed the app
            NSString *name = [params objectForKey:@"user"]; // returns Joe
            NSString *profileUrl = [params objectForKey:@"profile_pic"]; // returns https://s3-us-west-1.amazonaws.com/myapp/joes_pic.jpg
            NSString *description = [params objectForKey:@"description"]; // returns Joe likes long walks on the beach...

            // route to a profile page in the app for Joe
            // show a customer welcome
        }
    }];
}

Di openUrl untuk menangani panggilan URI:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    // pass the url to the handle deep link call
    // if handleDeepLink returns YES, and you registered a callback in initSessionAndRegisterDeepLinkHandler, the callback will be called with the data associated with the deep link
    if (![[Branch getInstance] handleDeepLink:url]) {
        // do other deep link routing for the Facebook SDK, Pinterest SDK, etc
    }
    return YES;
}
  1. Terakhir, untuk membuat tautan yang dihosting, itu sangat sederhana. Anda hanya perlu memanggil getShortUrl untuk membuat satu secara dinamis. Anda dapat memasukkan sebanyak mungkin kunci dan nilai di tautan (untuk diambil dalam callback initSession)

Anda dapat menempatkan cuplikan ini di mana pun Anda ingin membuat tautan:

NSMutableDictionary *params = [[NSMutableDictionary alloc] init];

[params setObject:@"Joe" forKey:@"user"];
[params setObject:@"url.to.picture/mypic.png" forKey:@"profile_pic"];
[params setObject:@"Joe likes long walks on the beach..." forKey:@"description"];

// Customize the display of the link
[params setObject:@"Joe's MyApp Referral" forKey:@"$og_title"];
[params setObject:@"url.to.picture/mypic.png" forKey:@"$og_image_url"];
[params setObject:@"Join Joe in MyApp - it's awesome" forKey:@"$og_description"];

// Customize the redirect performance
[params setObject:@"http://myapp.com/desktop_splash" forKey:@"$desktop_url"];

Branch *branch = [Branch getInstance];
[branch getShortURLWithParams:params andCallback:^(NSString *url, NSError *error) {
    // show the link to the user or share it immediately
}];

Android sangat mirip dalam pemanggilan metode dan fungsionalitas dan dapat ditemukan di situs.


5
2018-06-02 05:15



maaf jika jawaban saya tidak persis seperti yang Anda harapkan tetapi hanya untuk membagikan apa yang kami lakukan di situs web dan aplikasi kami.

Misalnya, saya tahu kami harus menambahkan lebih banyak tag agar berfungsi dengan kartu twitter dan berikut adalah daftar properti meta yang kami miliki di laman kami:

meta property="twitter:card" content=""
meta property="twitter:title" content=""
meta property="twitter:description" content=""
meta property="twitter:image:src" content=""
meta property="twitter:app:id:iphone" content=""
meta property="twitter:app:name:iphone" content="Marmiton"
meta property="twitter:app:url:iphone" content=""
meta property="twitter:app:id:googleplay" content=""
meta property="twitter:app:name:googleplay" content=""
meta property="twitter:app:url:googleplay" content=""

dan metha yang Anda miliki:

meta property="al:iphone:app_store_id" content=""
meta property="al:iphone:app_name" content=""
meta property="al:iphone:url" content=""
meta property="al:android:package" content=""
meta property="al:android:app_name" content=""
meta property="al:android:url" content=""

kami juga memiliki meta meta facebook yang didefinisikan seperti fb: app_id. Saya menyebutkan bahwa karena ketika Anda menerima tautan dalam di aplikasi Anda, Anda juga memiliki id aplikasi facebook di tautan applink.

Dan dari apa yang kami uji:

  • facebook tidak membuka tautan langsung di iOS sedangkan Android memberi Anda pilihan aplikasi. Kadang-kadang muncul popup biru di bagian bawah layar dan kadang-kadang Anda hanya memiliki tautan yang ditambahkan di actionsheet yang Anda miliki ketika Anda menekan tombol berbagi di facebook (safari) tampilan web (hanya pada pemuatan pertama) -> presentasi ini dari tautan tergantung pada bagaimana konten dibagikan di facebook.

  • twitter menambahkan tautan ke aplikasi di dalam kartu di iOS.

Tidak tahu apa yang bisa saya tambahkan lebih banyak.

Semoga ini sedikit membantu.


3
2017-08-01 22:34