2016-05-22 15 views
2

これは状況です。カスタムキー/値を持つリンクの1つをクリックすると、initSessionWithLaunchOptions:andRegisterDeepLinkHandlerのコールバックが正常にトリガされますが、 「params」には、リンクからアプリを新規に開いた場合のカスタムキー/値のみが含まれます。アプリがバックグラウンドで既に実行されていて、リンクをクリックした場合、コールバックは呼び出されますが、パラメータは存在しません。これは数週間前に働いていましたが、現在は動作を停止しているようです。私はiOS SDK 0.12.1にアップグレードしようとしましたが、まだ運がありません。Branch.ioディープリンクハンドラが適切なメタデータで呼び出されていない

アプリがアクティブになってから遅延したBranch.getInstance().getLatestReferringParams()の呼び出しを試行していますが、時々私はそこからパラメータを取得していますが、確定的ではなく、時には2秒かかります。 、時には決してない。 @AlexBauerここに、アプリケーションデリゲートの部分があります。ところで、私はアプリでFacebookとの統合を持っていない:ここでは

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

    let branch: Branch = Branch.getInstance() 
    branch.initSessionWithLaunchOptions(launchOptions, andRegisterDeepLinkHandler: { params, error in 
     if (error == nil) { 
      print(params) 
      self.tryInviteFlow(params) 
     } else { 
      print(error.localizedDescription) 
     } 
    }) 
} 

func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool { 
    // pass the url to the handle deep link call 
    return Branch.getInstance().continueUserActivity(userActivity); 
} 
+0

ここにBranch.ioのAlex:これは間違いなく奇妙です! AppDelegateの関連するセクションと正しく動作していないリンクの例を確認できますか? –

+0

また、Facebook SDKを使用していますか?私たちには、今のところ既知のエッジケースがありますが、回避策があります –

+0

@AlexBauerはアプリケーションデベロッパー – vorterixe

答えて

0

は、アプリがバックグラウンドにされた後にアクティブになったときに支店リンクはコールドスタートから正常に動作しなく問題のための迅速なトラブルシューティングのプライマー..です。

アプリは支店のリンクから開かれている場合:アプリが冷たい起動された場合(すなわち、それはバックグラウンドではなかった)

  • アプリだった場合は、エントリポイントがdidFinishLaunchingWithOptions
  • です私n背景がユニバーサルリンクを介して開かれている場合(デバイスがiOS 9.2以降を実行している場合)、エントリーポイントはcontinueUserActivity関数
  • URIスキームを使用してアプリケーションを開いている場合デバイスがiOS 9より前で動作していて、iOS 9のバージョンが9.2以降の場合)、エントリポイントはopenURL関数になります。

で定義されている同じBranch initコールバックdidFinishLaunchingWithOptionsは、openURLおよびcontinueUserActivity関数に挿入される分岐コードによっても呼び出されます。

  • openURLでは、これは次のとおりです。Branch.getInstance()。handleDeepLink(url); continueUserActivityで
  • が、これは次のとおりです。Branch.getInstance()継続(userActivity)

これらの支店の関数が呼び出されていない場合はアプリやリンクを再開するとき、リンクパラメータを受け取り、支店のinitコールバックが呼び出されないでしょう。したがって、パラメータは利用できません。

これらの関数が呼び出されても、openURL関数とcontinueUserActivity関数内の他のコードは、分岐コードに到達できないことがあります。これらのコードパスに他のコードがある場合は、Branch関数またはinitコールバックのコード行にブレークポイントを設定してテストすることで、適切なBranch関数が実際に呼び出されていることを確認してください。

コールドスタートではなくウォームスタートで問題が発生する可能性がある別のシナリオは、Branchパラメータを読み取るコードがBranch initコールバックの外部で呼び出されているときで、コールバックが完了する前です。 appがdidFinishLaunchingWithOptionsで十分にビジー状態にある場合、initコールバックは、パラメータがチェックされる前にinitコールバックが完了するのに十分長く遅延されることがあります。後で、アプリケーションが再開しているときに、アプリで発生することが少なくなり、initコールバックが完了する前にパラメータをチェックするコードがチェックされる可能性があります。これは可能性の高いシナリオではありませんが、発生する可能性があります。

この "競合状態"タイプの状況を回避するには、initコールバック内からブランチリンクパラメータをチェックするか、initコールバックが完了したことを通知するように設定された通知を受信した後でのみチェックします。 SDKに含まれているTestBed-Swiftプロジェクトの通知(この場合はhttps://github.com/BranchMetrics/ios-branch-deep-linking/tree/master/Branch-TestBed-Swift)を使用してください。

関連する問題