【问题标题】:iOS facebook App Links issueiOS facebook App Links 问题
【发布时间】:2014-09-07 22:45:39
【问题描述】:

我已经通过 Facebook 在 iOS 应用中成功实现了深度链接。但我想将 Facebook 帖子打开的链接重定向到我 iOS 应用程序中的特定屏幕。

为此,我关注此链接:https://developers.facebook.com/docs/applinks/ios

所以 openURL 看起来像这样:

    - (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {


    NSString *callingUrl=[[NSUserDefaults standardUserDefaults] stringForKey:@"url"];
    if ([callingUrl isEqualToString:@"fb"]) {
        BOOL urlWasHandled =
        [FBAppCall handleOpenURL:url
               sourceApplication:sourceApplication
                 fallbackHandler:
         ^(FBAppCall *call) {
             // Parse the incoming URL to look for a target_url parameter

             NSString *query = [url query];  // **query is nil here**
             NSDictionary *params = [self parseURLParams:query];
             // Check if target URL exists
             NSString *appLinkDataString = [params valueForKey:@"al_applink_data"];
             if (appLinkDataString) {
                 NSError *error = nil;
                 NSDictionary *applinkData =
                 [NSJSONSerialization JSONObjectWithData:[appLinkDataString dataUsingEncoding:NSUTF8StringEncoding]
                                                 options:0
                                                   error:&error];
                 if (!error &&
                     [applinkData isKindOfClass:[NSDictionary class]] &&
                     applinkData[@"target_url"]) {
                     NSString *targetURLString = applinkData[@"target_url"];
                     // Show the incoming link in an alert
                     // Your code to direct the user to the
                     // appropriate flow within your app goes here
                     [[[UIAlertView alloc] initWithTitle:@"Received link:"
                                                 message:targetURLString
                                                delegate:nil
                                       cancelButtonTitle:@"OK"
                                       otherButtonTitles:nil] show];
                 }
             }
         }];
        return urlWasHandled;
}

解析URL参数:

  - (NSDictionary*)parseURLParams:(NSString *)query {
    NSArray *pairs = [query componentsSeparatedByString:@"&"];
    NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
    for (NSString *pair in pairs) {
        NSArray *kv = [pair componentsSeparatedByString:@"="];
        NSString *val = [[kv objectAtIndex:1]
                         stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        [params setObject:val forKey:[kv objectAtIndex:0]];
    }
    return params;
}

问题是,url 没有被解析。我在上面的代码中已经提到:querynil

[url query] - 这里的网址是:fb654127854605525://authorize/#target_url=http%3A%2F%2FmyDomain%2FmyApp%2Fregister.php%3Fcampaign_id%3D999%26l_id%3D133%26share%3Dtrue%26customer_id%3DNDQ1%26domain%3D1

我哪里错了?网址有问题吗?

【问题讨论】:

    标签: ios facebook deep-linking


    【解决方案1】:

    我遇到了同样的问题。

    替换:

    NSString *query = [url query];
    

    与:

    NSString *query = [url absoluteString];
    

    然后您应该有要解析的 url。

    【讨论】:

      【解决方案2】:

      使用 Bolts 框架解析 URL。从版本 4 开始,该框架包含在 FBSDK 中。

      【讨论】:

      • 很想看看如何做到这一点的例子。
      【解决方案3】:

      使用 Bolts SDK 解析 FB URL 的代码示例(用于RobP 注释): ``

      - (void)openURL:(NSURL *)url fromSource:(NSString *)source
      {
          NSString *s = [url resourceSpecifier];
          if (([url query] == nil) && (s != nil))
          {
              NSRange r = [s rangeOfString:@"target_url="];
              if (r.location != NSNotFound)
              {
                  url = [NSURL URLWithString:[[s substringFromIndex:(r.location + r.length)] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
              }
          }
          BFURL *parsedUrl = [BFURL URLWithInboundURL:url sourceApplication:source];
          if (parsedUrl != nil)
          {
              NSLog(@"APP DATA=%@\nTARGET QUERY=%@\n",[[parsedUrl appLinkData] debugDescription],[[parsedUrl targetQueryParameters] debugDescription]);
              if ([parsedUrl targetQueryParameters] != nil)
              {
                  NSString *objectId = [parsedUrl targetQueryParameters][@"action_object_map"];
                  if (objectId == nil)
                  {
                      NSString *actionId = [parsedUrl targetQueryParameters][@"fb_action_ids"];
                      if (actionId != nil)
                      {
      // Do something with FB Action Id
                      }
                  }
                  else
                  {
                      objectId = [objectId substringWithRange:NSMakeRange(1, [objectId length] - 2)];
      // Do something with FB Object Id
                  }
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2018-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多