Firebase动态链接无法直接打开应用

时间:2017-12-07 03:27:10

标签: ios objective-c firebase dynamic-linking firebase-dynamic-links

根据Firebase文档,我在Firebase控制台中创建动态链接,然后在我的应用中包含动态链接SDK。

一切都很好,但是当我点击Facebook或Messenger上的分享链接(这是我的动态链接)时,它会弹出一个带有打开应用程序按钮的页面并询问我是否要打开我的应用程序。 enter image description here 我没有写这个页面。我想删除它。 enter image description here

但是我点击了备忘录中的链接,它会打开我的应用并直接转到右侧页面。我希望以共享链接的方式相同。

这是我的代码,我使用带有Objective-c的Xcode来开发iOS应用程序。谢谢!

Appdelegate.m

echo '<img src=/pictures/"$ANSWER".jpg >';

ProductView.m

(这是在我的应用程序中显示产品的页面,这是我点击共享按钮生成动态链接的功能。)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{   
    [FIROptions defaultOptions].deepLinkURLScheme = @"com.levooya.LeVooya";
    [FIRApp configure];
    return YES;
}

- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray * _Nullable))restorationHandler{
    NSURL *url = userActivity.webpageURL;
    NSLog(@"continueUserActivity url.absoluteString:%@",url.absoluteString);

    BOOL handled = [[FIRDynamicLinks dynamicLinks] handleUniversalLink:userActivity.webpageURL completion:^(FIRDynamicLink *dynamicLink, NSError *error){
        if(dynamicLink.url){
            NSLog(@"okokokokokok");
            NSLog(@"dynamicLink.url:%@",dynamicLink.url);

            NSURLComponents *urlComponents = [NSURLComponents componentsWithURL:dynamicLink.url
                                                      resolvingAgainstBaseURL:NO];

            for(NSURLQueryItem *item in urlComponents.queryItems){
                if([item.name isEqualToString:@"product_id"]){
                    NSLog(@"item.value:%@",item.value);
                    NSString *productID = item.value;

                    NSDictionary *urlSchemeDict = [[NSDictionary alloc] init];

                    urlSchemeDict = [NSDictionary dictionaryWithObject:productID forKey:@"product_id"];
                    [[NSNotificationCenter defaultCenter] postNotificationName:@"URLSchemeShowProduct" object:nil userInfo:urlSchemeDict];

                    leData = [LevooyaData getInstance];
                    leData.urlSchemeDict = nil;
                    leData.urlSchemeDict = urlSchemeDict;
                }
            }
        }
    }];
    return YES;
}

1 个答案:

答案 0 :(得分:3)

您提到的页面是应用预览页面,请参阅https://firebase.google.com/docs/dynamic-links/link-previews

您可以通过指定动态链接参数efr=1来停用此页面。在控制台中创建链接时也有一个复选框以禁用此页面。在您的代码中使用navigationInfoParameters.forcedRedirectEnabled = YES;

要记住的一点:如果您在iPhone上安装了应用程序时看到了App Preview页面,这意味着Universal Links无法参与。将动态链接粘贴到浏览器地址栏时可能会发生这种情况。或点击非合作应用程序内部发生的链接(某些应用程序禁止参与Universal Links)。确保您已禁用应用预览测试了链接行为,并对此感到满意。

编辑: 刚刚意识到你的深层链接不正确。 而不是

NSString *originalLink = [NSString stringWithFormat:@"https://pbu3y.app.goo.gl/?link=https://levooya.com/product?product_id=%u&isi=1221262097&ibi=com.levooya.LeVooya&product_id=%u", productID, productID];

你应该使用你的深层链接,如下所示:

NSString *originalLink = [NSString stringWithFormat:@"https://levooya.com/product?product_id=%u", productID];