2016-12-14 3 views
2

Branch.io 링크가 앱이 이미 설치된 경우 데이터를 가져 오지 못합니다. 앱 설치 링크가 앱을 직접 열지 만 데이터가 누락 된 경우. 하지만 앱 스토어로 리디렉션 한 다음 지점 링크를 다시 클릭하고 앱을 직접 연 다음 데이터가 제공됩니다. 아래 코드를 안내하고 안내하십시오.Branch.io - 앱을 열고 있지만 데이터를 가져 오지 않는 링크

업데이트 :

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
{ 
    let branch: Branch = Branch.getInstance() 
    branch.setDebug() 
    branch.initSessionWithLaunchOptions(launchOptions, andRegisterDeepLinkHandler: {params, error in 
     if error == nil { 
      // params are the deep linked params associated with the link that the user clicked -> was re-directed to this app 
      // params will be empty if no data found 
      print("params: %@", params.description) 
      print(params["event_id"]) 
      if let url = params["event_id"] as? NSInteger { 
       let strEventID = String(url) 
       print(strEventID) 


    }) 
    self.window?.rootViewController = nav 
    self.window?.makeKeyAndVisible() 
    return true 
} 

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool { 

    Branch.getInstance().handleDeepLink(url) 

    if(sourceApplication == "com.linkedin.LinkedIn") 
    { 
     if(LISDKCallbackHandler.shouldHandleUrl(url)) 
     { 
      return LISDKCallbackHandler.application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation) 
     } 
    } 

    return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation) 
} 

func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool { 
    // handler for Universal Links 
    Branch.getInstance().continueUserActivity(userActivity) 
    return true 
} 

// Called when a notification is received and the app is in the 
// foreground (or if the app was in the background and the user clicks on the notification). 
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) 
{ 
    Branch.getInstance().handlePushNotification(userInfo) 
    if(UserSingleton.sharedInstance.accessToken != kEmptyString) 
    { 
     if let aps = userInfo["aps"] as? NSDictionary { 

      var title = kEmptyString 
      var message = kEmptyString 
      var inviteID = kEmptyString 
      var statusType = kEmptyString 

      if let inviteIDLocal = aps.valueForKey("id") as? NSNumber 
      { 
       inviteID = "\(inviteIDLocal)" 
      } 

      else if let inviteIDLocal = aps.valueForKey("id") as? String 
      { 
       inviteID = inviteIDLocal 
      } 
      else 
      { 
       inviteID = "0" 
      } 

      if let statusTypeLocal = aps.valueForKey("status_type") as? String 
      { 
       statusType = statusTypeLocal 
      } 

      if let titleLocal = aps.valueForKey("alert")?.valueForKey("title") as? String 
      { 
       title = titleLocal 
      } 

      if let messageLocal = aps.valueForKey("alert")?.valueForKey("body") as? String 
      { 
       message = messageLocal 
      } 
      CommonFunctions.addNotificationBar(title,message: message, inviteID: inviteID,statusType: statusType) 
     } 
    } 
} 
+0

이것은'continueUserActivity' 구현에 문제가있는 것처럼 들립니다. AppDelegate 파일에서'didFinishLaunching' 메서드 전체를 게시 할 수 있습니까? –

+0

확실한 @AlexBauer 업데이트 된 질문을 확인하십시오 –

답변

-2

하루 지출 후, 마지막으로 그 이유를 알게되었습니다. branch.io link의 가난한 작업. 코드에 버그가 있습니다.

// Respond to Universal Links 
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([**Any**]?) -> Void) -> Bool { 
// pass the url to the handle deep link call 
Branch.getInstance().continue(userActivity) 

return true 
} 

"Any"는 실제로 "AnyObject"이어야합니다.

+0

이것은 실제로 * 올바르지 않습니다 *. Apple의이 메소드에 대한 API 참조 항목 (https://developer.apple.com/reference/uikit/uiapplicationdelegate/1623072-application)에서 볼 수 있듯이, Branch 설명서는 Swift 3에 대해 정확합니다. 그러나,이 메소드에서'AnyObject'를 사용하는 것은 Swift 2.3에서 올바른 것입니다. 구문 차이에 대한 자세한 내용은 [여기] (http://stackoverflow.com/questions/40673319/ios-swift-2-c-crerect-syntax-for-application-restorationhandler)를 참조하십시오. 문제가 생겨서 죄송합니다! –

+0

@AlexBauer 신속한 2에서 일하는 저와 같은 사람들이 신속한 3을 시작하지 않았기 때문에 곤경에 처하게 될 것이므로이 코드는 해당 문서의 어디에도 언급되어 있지 않습니다. 그리고 여기서 나는 어떤 에러도 발생하지 않으므로 잘못된 것입니다. 문서에서 그런 것들을 지정해야합니다. 명확하게 해 주셔서 감사합니다. –

+0

@AlexBauer 나에게 안내해 주시겠습니까, 링크가 앱을 열고 데이터를 가져 오는 것이 아니라 앱을 종료하고 링크에서 시작하면 데이터가 전달되지 않고 앱이 정상적으로 다시 시작될 때 (링크가 아닌 경우) 데이터가 자동으로 전달됩니다. –