3

URL を使用uber://?...して Uber ネイティブ アプリにディープ リンクする Uber API を使用しています。モバイル Web サイトを構築しており、ここで説明されているURL のいずれかを構築しています。

iOS ではすべて正常に動作しますが、Android では Uber アプリが開き、パラメーターの 1 つしか取得しませんproduct_id。そのため、URL をエンコードする方法と Android システムが URL を開く方法に問題があると思います。URLを構築するためのJSは次のとおりです。

uber.createURL = function() {

    var params = {
        "client_id": uber.CLIENT_ID,
        "product_id": maps.product_id,
        "pickup[latitude]": maps.noSurgeMarker.getPosition().lat(),
        "pickup[longitude]": maps.noSurgeMarker.getPosition().lng(),
        "dropoff[latitude]": maps.destMarker.getPosition().lat(),
        "dropoff[longitude]": maps.destMarker.getPosition().lng(),
        "pickup[formatted_address]": $('#pickup').val(),
        "dropoff[formatted_address]": $('#destination').val()
    };

    var url = 'uber://?action=setPickup';

    for (var key in params) {
        if (params.hasOwnProperty(key)) {
            url += ('&' + key + '=' + encodeURIComponent(params[key]));
        }
    }

    return url;
};

次に、次のコードを呼び出してリンクを開きます。

var url = uber.createURL();
window.location.href = url;

明らかな何かが欠けていますか?繰り返しますが、これは iOS では機能しますが、Android では機能しません。また、奇妙なことcreateURLに、コンピューターで URL を生成し、PushBullet を使用して Android デバイスに送信すると、完全に機能します。しかし、Chrome for Android で URL を取得すると、Uber アプリが開きproduct_id、ピックアップまたはドロップオフの部分ではなく、正しいものだけが表示されます。

注: jQuery の関数を使用して既に trued を使用してparamsいますが、それはうまく機能しませんでした。そのため、手動for (var key in params) {...}ループに行きました。

4

2 に答える 2

2

encodeUriComponentkey と params[key] の両方を呼び出す必要があります。

于 2014-12-30T04:07:31.537 に答える