web-dev-qa-db-ja.com

iOSの遅延ディープリンク

IOSアプリケーションの1つに遅延ディープリンクを実装して、ユーザーが友人をアプリの使用に招待するよう促し、紹介リンクからのインストール数に基づいてユーザーに報いるようにしています。基本的に TapStreamの製品 に似ています。

この例を考えてみましょう:

そのため、UserAは自分のリンク「ourappURL.com/refer?id=userA」を必要なネットワークで共有します。ユーザーBはそのリンクをクリックします。これにより、ユーザーはSafariに移動し、ユーザーがアプリをダウンロードするApp Storeページに移動します。

UserBがアプリを開くと、アプリは自分が入った紹介ID(ある場合)を確認します。この例では、紹介IDは紹介リンクにあったIDであるため、「userA」になります。その後、アプリはこれをサーバーに送信し、UserAに紹介クレジットを付与します。

この問題をコア部分に分解しようとしています。最初の部分は、ユーザーの紹介リンクのWebページを取得して、アプリがアクセスできるデバイスに紹介IDを保存することです。しかし、iOSのサンドボックス化された性質のため、これが可能かどうかはわかりません。

多くの広告プロバイダーが広告キャンペーンからインストールを追跡する機能を提供しているため、これが根本的に可能であることを知っています(たとえば、モバイルアプリの追跡を参照)。

41
Kiran Panesar

私たちも自分でこれをやろうとしましたが、ここでさまざまなステップを分解してみます。

あなたの例に戻ると、デバイスIDと「id = userA」のすべての関連データを「記憶」するのは正しいです。あなたは「iOSのサンドボックス化された性質」についても正しいですサファリ)。

これに対するソリューションは、ブラウザーとアプリ(つまり、バックエンドサーバー)の両方がアクセスできる環境で、このデバイスをデータのキーと値のペアに保存することです。

最大の課題であり続ける次の課題は、ブラウザから収集可能な情報からこのデバイスを一意に識別する方法ですか?ブラウザのJavascriptは、ネイティブアプリとは異なり、iOSデバイスを一意に識別するために使用できるIDFAにアクセスできません。これを克服するために、ブラウザアプリとネイティブアプリの両方で利用可能な共通情報の組み合わせを使用することを想像できます。つまり、OSタイプ、パブリックIP、画面サイズなどです。これらのデータフィールドは一意性を保証しません(2つのiPhone 6が同じルーターを介してこのWebページにアクセスすることを想像してください)。したがって、バックエンドサーバー(これを使用してこのキーと値のペアを格納すると仮定)は、キーの衝突を処理する方法に関する戦略を持ちます。つまり、2番目のキーは最初のキーを削除します。単一のキーの値のキュー。これは、このテクノロジーを実際にどのように使用するかによって異なります。

最後の手順は、ブラウザで以前に使用したものとまったく同じフィールドを使用してアプリでこの複合キーを形成し、バックエンドサーバーで「ルックアップ」を実行して以前に保存した値を取得します。

手順の概要は次のとおりです。

  1. ユーザー1は、次のリンクを2に送信してユーザー2を招待します。example.com?inviter = 1
  2. ユーザー2がWebページPにアクセスします
  3. Pは次のキーと値のペアを作成してサーバーに送信しますS iOS | 55.55.55.55 | 750×1334-> viter_id = 1
  4. ユーザー2はアプリストアにアクセスし、アプリAをダウンロードします
  5. Aを2回最初に起動すると、Aは同じキーでSに接続します(IPが変更されていないと仮定します)。
  6. Sは、渡されたこのキーを使用して、inviter_id = 1の値を見つけます。たとえば、ユーザー1に招待2に対して5ポイントを与えます。

この助けを願っています!

編集04/24:

デリックがコメントでそれを言及したので、私はここで私たちの物語を終えるためにこの機会を利用すると思います。

私が自分でこれを行うために試みたと述べた私の答えの最初に戻ります。現在のシステムアーキテクチャ(とにかく最適化されていない、またはこのようなディープリンクデータを保存および分析するために最適化されることを意図していない)に基づいた作業プロトタイプがあり、最終的にこのプロジェクトに追加のエンジニアリングリソースを割り当てないことにしました。

このマッチングプロセスのヒューリスティックな性質により、このプロジェクトでは、ROIを低下させるために、デバッグ、チューニング、および最適化を絶えず行う必要があることがわかりました。さらに重要なことは、自分よりも専門的ではるかに優れた仕事をしている他の企業を見つけたことです。

内部システムの使用を停止してからおそらく6か月が経過しており、このような決定を後悔していない。

このプロセス中に、Appsflyer、Adjust、TapStreamなどの多くのベンダーと協力し、最終的にBranch Metrics https://branch.io になりました。

DIYをするべきか、他の会社と再び仕事をするべきかは、あなたの具体的な目的に依存します。 Branchが完全に無料である間に他のベンダーが月額500ドルから数千ドルを請求しただけでなく、提供したサポートのレベルも比類のないものであるため、Branchにとどまることにしました。

46
ethangui

ここに良い解決策があります: http://blogs.innovationm.com/deferred-deep-linking-in-ios-with-universal-link/

基本的なワークフロー:

  • ユーザーがウェブ上のドメインリンクを選択します。
  • リンクは紹介IDをCookieに設定します。
  • ユーザーがアプリストアにリダイレクトされました。
  • アプリの起動時に、SFSafariViewControllerで紹介ページを読み込みます。
  • 参照ページはCookieをチェックし、Cookieが存在する場合、参照IDを使用してアプリへのディープリンクを呼び出します。
8
PPierson

クリップボード(NSPasteboard)を使用してこれを実現しました。アプリストアへのリダイレクトを処理するWebページは、ユーザーがアプリをダウンロードする前にモバイルデバイスのクリップボードに貼り付けます。アプリをインストールすると、最初の起動時にNSPasteboardを使用して、適切にコード化された文字列をチェックします。この文字列には、目的のテキスト、またはより安全に、バックエンドから興味深いデータを取得するために使用されるトークンを含めることができます。 Objective Cの場合:

UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
NSString *pasteboardString = pasteboard.string;

クリップボードは、同じアクションが繰り返されるのを避けるために、アプリで処理が完了すると消去できます。

4
Anthony Scott