内容共享

概述

如果您的用户在您的应用程序中创建内容,则他们可能希望与朋友分享该内容。您可以通过轻松生成共享链接来鼓励这种情况,这些链接会打开您的应用程序精确地返回到最初共享的内容。这样,即使工作的时候谁没有按打开链接的用户'吨有您的应用程序安装呢。

指南

假设'表示您开发了一个名为Branch Monster Factory的应用程序。您希望用户与他们的朋友共享他们创建的怪物,并在您的应用打开后立即查看共享的怪物。让'就开始吧!

生成共享链接

我们需要做的第一件事是允许您的用户创建链接。这些链接将包含对共享内容的引用,这些引用将生成分析数据,并允许您的应用在打开链接时直接路由回该内容。

首先将相关的Branch框架导入您将要使用的视图控制器中:

  • iOS-Objective C

      #import "BranchUniversalObject.h"
      #import "BranchLinkProperties.h"
    
  • iOS-Swift

      {% highlight objective-c %}
      #import "BranchUniversalObject.h"
      #import "BranchLinkProperties.h"
      #import "BranchConstants.h"
    

创建一个BranchUniversalObject 其中包含有关正在共享的内容的详细信息。您可以在此处找到其他平台的示例。

  • iOS-Objective C

      BranchUniversalObject *branchUniversalObject = [[BranchUniversalObject alloc] initWithCanonicalIdentifier:@"monster/12345"];
      branchUniversalObject.title = @"Meet Mr. Squiggles";
      branchUniversalObject.contentDescription = @"Your friend Josh has invited you to meet his awesome monster, Mr. Squiggles!";
      branchUniversalObject.imageUrl = @"https://example.com/monster-pic-12345.png";
      [branchUniversalObject addMetadataKey:@"userId" value:@"12345"];
      [branchUniversalObject addMetadataKey:@"userName" value:@"Josh"];
      [branchUniversalObject addMetadataKey:@"monsterName" value:@"Mr. Squiggles"];
    
  • iOS-Swift

      let branchUniversalObject: BranchUniversalObject = BranchUniversalObject(canonicalIdentifier: "monster/12345")
      branchUniversalObject.title = "Meet Mr. Squiggles"
      branchUniversalObject.contentDescription = "Your friend Josh has invited you to meet his awesome monster, Mr. Squiggles!"
      branchUniversalObject.imageUrl = "https://example.com/monster-pic-12345.png"
      branchUniversalObject.contentMetadata.customMetadata = ["custom":"123"]
      branchUniversalObject.contentMetadata.customMetadata = ["anything":"everything"]
    
  • 安卓

       BranchUniversalObject branchUniversalObject = new BranchUniversalObject()
                      .setCanonicalIdentifier("monster/12345")
                      .setTitle("Meet Mr. Squiggles")
                      .setContentDescription("Your friend Josh has invited you to meet his awesome monster, Mr. Squiggles!")
                      .setContentImageUrl("https://example.com/monster-pic-12345.png")
                      .setContentMetadata(new ContentMetadata().addCustomMetadata("userId", "12345")
                          .addCustomMetadata("userName", "Josh")
                          .addCustomMetadata("monsterName", "Mr. Squiggles"));
    

canonicalIdentifier或canonicalUrl

canonicalIdentifiercanonicalUrl 参数极大地改善了Branch捕获的内容分析数据。它对于那部分内容应该是唯一的,并可以帮助Branch在同一事物的许多实例之间进行重复数据删除。合适的选项:具有路径的网站或具有实体标识符的数据库。

然后定义链接的属性。在示例中,我们的属性反映出这是共享内容,并且用户选择了Facebook作为目的地。

  • iOS-Objective C

      BranchLinkProperties *linkProperties = [[BranchLinkProperties alloc] init];
      linkProperties.feature = @"share";
      linkProperties.channel = @"facebook";
    
  • iOS-Swift

      let linkProperties: BranchLinkProperties = BranchLinkProperties()
      linkProperties.feature = "share"
      linkProperties.channel = "facebook"
    
  • 安卓

      LinkProperties linkProperties = new LinkProperties()
                     .setChannel("facebook")
                     .setFeature("sharing")
    

请注意,在Android上,您可以使用ShareSheetStyle类自定义样式。由于iOS共享表已烘焙到平台中,因此'不可自定义。

安卓

ShareSheetStyle shareSheetStyle = new ShareSheetStyle(MainActivity.this, "Check this out!", "This stuff is awesome:")
                        .setCopyUrlStyle(getResources().getDrawable(android.R.drawable.ic_menu_send), "Copy", "Added to clipboard")
                        .setMoreOptionStyle(getResources().getDrawable(android.R.drawable.ic_menu_search), "Show more")
                        .addPreferredSharingOption(SharingHelper.SHARE_WITH.FACEBOOK)
                        .addPreferredSharingOption(SharingHelper.SHARE_WITH.EMAIL)
                        .setAsFullWidthStyle(true)
                        .setSharingTitle("Share With");

然后,触发共享表显示,而无需创建链接。当用户选择共享目的地时,调用此方法将自动使用适当的分析渠道生成一个分支链接。您可以在此处找到其他平台的示例。

  • iOS-Objective C

      [branchUniversalObject showShareSheetWithLinkProperties:linkProperties
                                                 andShareText:@"Super amazing thing I want to share!"
                                           fromViewController:self
                                                  completion:^(NSString *activityType, BOOL completed) {
          NSLog(@"finished presenting");
      }];
    
  • iOS-Swift

      branchUniversalObject.showShareSheet(with: linkProperties,
                                           andShareText: "Super amazing thing I want to share!",
                                           from: self) { (activityType, completed) in
          if (completed) {
              print(String(format: "Completed sharing to %@", activityType!))
          } else {
              print("Link sharing cancelled")
          }
      }
    
  • 安卓

      branchUniversalObject.showShareSheet(this,
                                            linkProperties,
                                            shareSheetStyle,
                                             new Branch.BranchLinkShareListener() {
          @Override
          public void onShareLinkDialogDismissed() {
          }
      });
    

这里' S的你一个例子'会与iOS看到左边和Android上的权利:

图像

将新用户直接路由到内容

现在,您的用户已创建链接并将其发送给朋友,您应该在该朋友打开您的应用程序时检测到传入的链接,并直接将其路由到共享内容。在“ 深度链接路由页面上了解有关如何执行此操作的更多信息。

如果要向尚未下载您的应用的用户提供内容预览,请尝试使用 Deepviews

高级

创建没有共享表的动态链接

如果您'构建了自己的共享表,并且只想为单个共享消息创建Branch链接或具有另一个用例,则可以通过以下调用直接创建深度链接接:

  • iOS-Objective C

      [branchUniversalObject getShortUrlWithLinkProperties:linkProperties andCallback:^(NSString *url, NSError *error) {
          if (!error) {
              NSLog(@"got my Branch invite link to share: %@", url);
          }
      }];
    
  • iOS-Swift

      branchUniversalObject.getShortUrl(with: linkProperties) { (url, error) in
          if (error == nil) {
              print("Got my Branch link to share: (url)")
          } else {
              print(String(format: "Branch error : %@", error! as CVarArg))
          }
      }
    
  • 安卓

      branchUniversalObject.generateShortUrl(this, linkProperties, new BranchLinkCreateListener() {
          @Override
          public void onLinkCreate(String url, BranchError error) {
              if (error == null) {
                  Log.i("MyApp", "got my Branch link to share: " + url);
              }
          }
      });
    

您可以在上面找到linkProperties 示例。接下来,您将使用返回的链接,并帮助用户将其发布到Facebook(在此示例中)。

指定共享的电子邮件主题

大多数共享选项仅包含一串文本,但电子邮件除外,该电子邮件具有主题和正文。共享文本将填充在正文中,您可以在链接属性中指定电子邮件主题,如下所示。

  • iOS-Objective C

      BranchLinkProperties *linkProperties = [[BranchLinkProperties alloc] init];
      linkProperties.feature = @"share";
      linkProperties.channel = @"facebook";
      [linkProperties addControlParam:@"$email_subject" withValue:@"Your Awesome Deal"];
    
  • iOS-Swift

      let linkProperties: BranchLinkProperties = BranchLinkProperties()
      linkProperties.feature = "share"
      linkProperties.channel = "facebook"
      linkProperties.addControlParam("$email_subject", withValue: "Your Awesome Deal")
    
  • 安卓

      ShareSheetStyle shareSheetStyle = new ShareSheetStyle(MainActivity.this, "Your Awesome Deal", "You will never believe what happened next!")
                              .setCopyUrlStyle(getResources().getDrawable(android.R.drawable.ic_menu_send), "Copy", "Added to clipboard")
                              .setMoreOptionStyle(getResources().getDrawable(android.R.drawable.ic_menu_search), "Show more")
                              .addPreferredSharingOption(SharingHelper.SHARE_WITH.FACEBOOK)
                              .addPreferredSharingOption(SharingHelper.SHARE_WITH.EMAIL)
                              .setAsFullWidthStyle(true)
                              .setSharingTitle("Share With");
    

预览和调试链接

  • 您可以通过将?debug=true 附加到链接并将其粘贴到桌面浏览器中来调试任何Branch链接。表明
    • 所有深度链接接参数和分析标签
    • 在许多浏览器中的特定路由指南
  • Facebook ' s OG标签测试器工具将为您显示链接的所有元数据,并预览在Facebook或其他社交媒体平台上共享时的外观。

2个月前更新

内容共享


建议的编辑仅限于API参考页

您只能建议对Markdown正文内容进行修改,而不能建议对API规范进行修改。