#Branch Metrics iOS SDK参考
这是一个我们开源iOS SDK的仓库,这里展示的信息是iOS SDK的参考手册。以下是本文件的完整内容列表。
注意:请访问我们新的[文档门户] (https://dev.branch.io),在那里您可以找到所有最新的文档和未来的文档更新。
目录 |
---|
获取示例应用 |
类参考表 |
[重要迁移] (#important-migration-to-v078) |
[常见问题解答] (#常见问题解答) |
[安装] (#安装) |
[配置(用于跟踪)] (#配置-跟踪) |
[注册URI方案直接深链(可选,但推荐)] (#注册-uri方案-直接深链) |
将您的Branch密钥添加到项目中 |
获取示例应用
此仓库中嵌入了完整的演示应用,您还可以检查我们的实时演示:[Branch Monster Factory](https://itunes.apple.com/us/app/id917737838)。如果您准备好深入研究,我们还[开源了Branchster的应用](https://github.com/BranchMetrics/Branchster-iOS)。
##类参考
类参考表
任务 | 方法 | 参数 |
---|---|---|
获取Singleton Branch实例 | 方法 | 参数 |
初始化Branch会话和深链路由功能 | 方法 | 参数 |
检索会话参数(安装或打开) | 方法 | 参数 |
检索安装参数(仅安装) | 方法 | 参数 |
持久性身份标识 | 方法 | 参数 |
注销 | 方法 | 参数 |
注册自定义事件 | 方法 | 参数 |
生成跟踪的深链URL(在安装和打开之间传递数据) | 方法 | 参数 |
UIActivityView分享面板 | 方法 | 参数 |
获取奖励余额 | 方法 | [参数] (#参数-9) |
兑换所有或部分奖励余额(存储状态) | 方法 | 参数 |
获取信用记录 | 方法 | 参数 |
获取促销代码 | 方法 | 参数 |
创建促销代码 | 方法 | 参数 |
验证促销代码 | 方法 | 参数 |
应用促销代码 | 方法 | 参数 |
我们将推荐代码重命名为促销代码,以更好地表示其目的。促销代码不建立被推荐/推荐的用户安装关系,这在称为“推荐代码”时并不明确。因此,所有ReferralCode方法都已弃用,以采用其PromoCode对应方法。
此外,围绕这些项目的枚举已被重新命名以更好地表示其含义。您可能需要重新命名您的用法以考虑到这一点。
最后,在迁移到PromoCode方法时,请注意,响应字典现在将包含promo_code
而不是referral_code
。
请注意,所有这些更改都是暂时向后兼容的(除枚举重命名外)。兼容性将在最终的1.0.0版本中删除。
对于链接,已从params字典中删除了`source:iOS`属性。但是增加了一些常量,这些常量由Branch后端添加,以关联点击和打开。如果您之前依赖source属性,现在您可以通过`BRANCH_INIT_KEY_CREATION_SOURCE`找到它。
我们已弃用了bnc_appkey并将其替换为新分支键。请参阅[添加分支键](#add-your-branch-key-to-your-project)以获取详细信息。
有疑问?需要错误排除帮助?请参阅我们的[常见问题解答](https://dev.branch.io/references/ios_sdk/#faq)以获取深入答案。
安装
编译后SDK的大小约为155KB。您可以通过克隆此仓库来保持最新版本,您可以通过CocoaPods安装,或者您可以直接下载原始文件。
CocoaPods可获取
分支可通过 CocoaPods 获取。要安装,请将以下行添加到您的Podfile中
pod "Branch"
下载原始文件
您也可以下载以下原始文件进行安装。
-
从这里下载代码: https://s3-us-west-1.amazonaws.com/branchhost/Branch-iOS-SDK.zip
-
测试床项目: https://s3-us-west-1.amazonaws.com/branchhost/Branch-iOS-TestBed.zip
注册您的应用
您可以在 https://dashboard.branch.io 上注册自己的应用ID。
配置(适用于跟踪)
有关配置SDK的帮助,请参阅iOS快速入门指南。
注意:我们的链接基础设施将支持您想要构建的一切。如果它不支持,我们会修复它,使其支持。只需将请求发送到 [email protected]。
注册URI方案直接深链接(可选但推荐)
您可以通过在您的项目信息文件(YourProject-Info.plist文件)中添加URI方案来注册您的应用以响应直接深链接(在移动浏览器中使用yourapp://)。请确保将yourapp更改为一个代表您应用名称的唯一字符串。有关完整说明,请参阅[注册直接深链接的URI方案]。(https://dev.branch.io/references/ios_sdk/#register-a-uri-scheme-direct-deep-linking-optional-but-recommended)
将您的Branch密钥添加到项目中
注册您的应用后,您可以在仪表板设置页面的设置部分找到您的Branch密钥。现在您需要将其添加到YourProject-Info.plist(Swift的Info.plist文件)中。请参阅[将您的Branch密钥添加到项目中](https://dev.branch.io/references/ios_sdk/#add-your-branch-key-to-your-project)以获取分步说明。
URI方案注意事项
获取单例Branch实例
所有Branch方法都需要一个主Branch对象的实例。以下是获取一个实例的方法。它是静态存储的,可以从任何类中访问。
####方法
Objective-C
Branch *branch = [Branch getInstance];
Swift
let branch: Branch = Branch.getInstance()
Objective-C
#warning Remove for launch
Branch *branch = [Branch getTestInstance];
Swift
//TODO: Remove for launch
let branch: Branch = Branch.getTestInstance();
####参数
分支键(NSString *):如果您没有将分支键存储在plist文件中,您可以选择将此键作为参数传递。
初始化分支会话和深链接路由函数
为了进行深链接,Branch必须在检查用户是否来自链接时初始化会话。此调用将在每次应用程序打开时初始化一个新的会话。每次应用程序打开时,它都会调用深链接处理块来通知您用户是否来自链接。如果您的应用程序打开时带有params中的键,则希望根据您传递的数据将用户路由到不同的页面。否则,将他们发送到通用屏幕。
####方法
Objective-C
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
Branch *branch = [Branch getInstance];
[branch initSessionWithLaunchOptions:launchOptions isReferrable:YES andRegisterDeepLinkHandler:^(NSDictionary *params, NSError *error) {
// route the user based on what's in params
}];
return YES;
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
if (![[Branch getInstance] handleDeepLink:url]) {
// do other deep link routing for the Facebook SDK, Pinterest SDK, etc
}
return YES;
}
Swift
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let branch: Branch = Branch.getInstance()
branch.initSessionWithLaunchOptions(launchOptions, true, andRegisterDeepLinkHandler: { params, error in
// route the user based on what's in params
})
return true
}
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject?) -> Bool {
if (!Branch.getInstance().handleDeepLink(url)) {
// do other deep link routing for the Facebook SDK, Pinterest SDK, etc
}
return true
}
####参数
######initSession
launchOptions (NSDictionary *) required : 这些启动选项通过 finishLaunchingWithOptions 传递给 Branch,用于通知我们用户是否来自 URI 调用。如果应用是通过 URI(如 myapp://)打开的,我们需要遵循特殊的初始化程序。
deepLinkHandler ^(NSDictionary *params, NSError *error) optional : 这是一个回调块,在 Branch 执行网络调用后,用于确定用户从何处来。由于 Branch 注册了生命周期通知,因此每次应用打开时都会调用此块。
- NSDictionary *params : 这些参数将包含在应用会话开始之前点击的 Branch 链接相关联的任何数据。有几个始终存在的键
- 'is_first_session' 表示这是一个第一次会话(安装)还是其他会话(打开)
- 'clicked_branch_link' 表示用户是否点击了触发此会话的 Branch 链接
- NSError *error : 此错误将为空,除非存在连接错误或其他错误。检查 !error 以确认它是有效链接。
- BNCServerProblemError 与 Branch 服务连接出现问题时出错
- BNCBadRequestError 请求格式不正确
isReferrable (BOOL) optional : 此布尔值允许您控制用户是否有资格被“推荐”。这对于积分和影响者跟踪适用。如果将 isReferrable 设置为 NO | false,并且用户在进入应用之前点击链接,则将显示深链接参数,但该用户将 不 被视为被推荐。如果将 isReferrable 设置为 YES | true,并且用户点击链接,则将显示深链接参数,并且用户 将 被视为被推荐。删除此参数以访问默认选项,只允许在 全新安装 时推荐用户,而不允许在打开时推荐。
handleDeepLink
url (NSString *) required : 此参数传递 URI 字符串,以便我们可以解析额外参数。例如,‘myapp://open?link_click_id=12345’。
返回值
initSession
无
handleDeepLink
BOOL handleDeepLink将返回一个布尔值,表示Branch是否处理了URI。如果URI调用是'myapp://open?link_click_id=12345',则handleDeepLink将返回YES,因为存在Branch点击对象。如果只是'myapp://',则handleDeepLink将返回NO。
###检索会话(安装或打开)参数
使用此命令后,这些会话参数将在任何后续时间点可用。如果没有params,则字典将为空。此命令会在每次新会话(应用程序安装和打开)时刷新。
####方法
Objective-C
NSDictionary *sessionParams = [[Branch getInstance] getLatestReferringParams];
Swift
let sessionParams = Branch.getInstance().getLatestReferringParams()
####参数
无
####返回值
**NSDictionary *** 当initSession返回深链接回调中设置的参数集时,我们将它存储在NSUserDefaults中,以便稍后检索。请注意,一旦应用程序最小化并且会话结束,这将被清除。
###检索安装(只安装)参数
如果您希望访问原始会话参数(仅用于首次安装事件的传递参数),可以使用此行。如果只想奖励通过推荐链接新安装应用程序的用户,则此功能非常有用。请注意,当调用setIdentity:并发生身份合并时,这些参数可能会更新。
####方法
Objective-C
NSDictionary *installParams = [[Branch getInstance] getFirstReferringParams]; // previously getInstallReferringParams
Swift
let installParams = Branch.getInstance().getFirstReferringParams() // previously getInstallReferringParams
####参数
无
持久化身份
通常情况下,您可能有自己的用户ID,或者希望推荐和事件数据在不同平台或卸载/重新安装时持续存在。如果您知道您的用户从不同的设备访问您的服务,这会很有帮助。这就是我们引入“身份”概念的地方。
####方法
为了识别用户,只需调用
#####Objective-C
// previously identifyUser:
[[Branch getInstance] setIdentity:your user id]; // your user id should not exceed 127 characters
#####Swift
// previously identifyUser:
Branch.getInstance().setIdentity(your user id) // your user id should not exceed 127 characters
####参数 无
###注销
如果您在您的应用程序中提供了注销功能,请确保在注销完成后清除用户。这样可以确保所有存储的参数都得到清除,并且所有事件都正确归因于正确的身份。
警告:此调用将清除设备上的促销积分和归因。
####方法
Objective-C
[[Branch getInstance] logout]; // previously clearUser
Swift
Branch.getInstance().logout() // previously clearUser
####参数 无
###注册自定义事件
####方法
Objective-C
[[Branch getInstance] userCompletedAction:@"your_custom_event"]; // your custom event name should not exceed 63 characters
Swift
Branch.getInstance().userCompletedAction("your_custom_event") // your custom event name should not exceed 63 characters
或者如果您想将一些状态与事件一起存储
Objective-C
[[Branch getInstance] userCompletedAction:@"your_custom_event" withState:(NSDictionary *)appState]; // same 63 characters max limit
Swift
Branch.getInstance().userCompletedAction("your_custom_action", withState: [String: String]()) // same 63 characters max limit; replace [String: String]() with params dictionary
您可以追踪的一些事件示例
@"complete_purchase"
@"wrote_message"
@"finished_level_ten"
####参数 无
生成受追踪的深度链接URL(在安装和打开时传递数据)
缩短链接
创建这些链接有很多选项。您可以在仪表板上为它们贴上标签以进行分析,或者甚至可以向链接点击的新安装或打开传递数据。这有多酷?您需要传递一个回调,以便在您准备链接时调用(这应该返回非常快,大约 50 毫秒来处理)。
编码说明
关于编码的一个快速说明。由于 NSJSONSerialization
支持有限的类,我们进行一些自定义编码以允许更多类型。当前支持的类型包括 NSDictionary
、NSArray
、NSURL
、NSString
、NSNumber
、NSNull
和 NSDate
(编码为 ISO8601 字符串带时区)。如果参数是未知类型,则将其忽略。
有关如何创建链接的更多详细信息,请参阅Branch 链接创建指南
####方法
Objective-C
// associate data with a link
// you can access this data from any instance that installs or opens the app from this link (amazing...)
NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
[params setObject:@"Joe" forKey:@"user"];
[params setObject:@"https://s3-us-west-1.amazonaws.com/myapp/joes_pic.jpg" forKey:@"profile_pic"];
[params setObject:@"Joe likes long walks on the beach..." forKey:@"description"];
// Customize the display of the link
[params setObject:@"Joe's My App Referral" forKey:@"$og_title"];
[params setObject:@"https://s3-us-west-1.amazonaws.com/myapp/joes_pic.jpg" forKey:@"$og_image_url"];
[params setObject:@"Join Joe in My App - it's awesome" forKey:@"$og_description"];
// Customize the redirect performance
[params setObject:@"http://myapp.com/desktop_splash" forKey:@"$desktop_url"];
// associate a url with a set of tags, channel, feature, and stage for better analytics.
// tags: nil or example set of tags could be "version1", "trial6", etc; each tag should not exceed 64 characters
// channel: nil or examples: "facebook", "twitter", "text_message", etc; should not exceed 128 characters
// feature: nil or examples: FEATURE_TAG_SHARE, FEATURE_TAG_REFERRAL, "unlock", etc; should not exceed 128 characters
// stage: nil or examples: "past_customer", "logged_in", "level_6"; should not exceed 128 characters
// Link 'type' can be used for scenarios where you want the link to only deep link the first time.
// Use nil, BranchLinkTypeUnlimitedUse or BranchLinkTypeOneTimeUse
// Link 'alias' can be used to label the endpoint on the link. For example: http://bnc.lt/AUSTIN28. Should not exceed 128 characters
// Be careful about aliases: these are immutable objects permanently associated with the data and associated paramters you pass into the link. When you create one in the SDK, it's tied to that user identity as well (automatically specified by the Branch internals). If you want to retrieve the same link again, you'll need to call getShortUrl with all of the same parameters from before.
Branch *branch = [Branch getInstance];
[branch getShortURLWithParams:params andTags:@[@"version1", @"trial6"] andChannel:@"text_message" andFeature:BRANCH_FEATURE_TAG_SHARE andStage:@"level_6" andAlias:@"AUSTIN68" andCallback:^(NSString *url, NSError *error) {
// show the link to the user or share it immediately
}];
// The callback will return null if the link generation fails (or if the alias specified is aleady taken.)
Swift
// associate data with a link
// you can access this data from any instance that installs or opens the app from this link (amazing...)
var params = ["user": "Joe"]
params["profile_pic"] = "https://s3-us-west-1.amazonaws.com/myapp/joes_pic.jpg"
params["description"] = "Joe likes long walks on the beach..."
// Customize the display of the link
params["$og_title"] = "Joe's My App Referral"
params["$og_image_url"] = "https://s3-us-west-1.amazonaws.com/myapp/joes_pic.jpg"
params["$og_description"] = "Join Joe in My App - it's awesome"
// Customize the redirect performance
params["$desktop_url"] = "http://myapp.com/desktop_splash"
// associate a url with a set of tags, channel, feature, and stage for better analytics.
// tags: nil or example set of tags could be "version1", "trial6", etc; each tag should not exceed 64 characters
// channel: nil or examples: "facebook", "twitter", "text_message", etc; should not exceed 128 characters
// feature: nil or examples: FEATURE_TAG_SHARE, FEATURE_TAG_REFERRAL, "unlock", etc; should not exceed 128 characters
// stage: nil or examples: "past_customer", "logged_in", "level_6"; should not exceed 128 characters
// Link 'type' can be used for scenarios where you want the link to only deep link the first time.
// Use nil, BranchLinkTypeUnlimitedUse or BranchLinkTypeOneTimeUse
// Link 'alias' can be used to label the endpoint on the link. For example: http://bnc.lt/AUSTIN28. Should not exceed 128 characters
// Be careful about aliases: these are immutable objects permanently associated with the data and associated paramters you pass into the link. When you create one in the SDK, it's tied to that user identity as well (automatically specified by the Branch internals). If you want to retrieve the same link again, you'll need to call getShortUrl with all of the same parameters from before.
// The callback will return null if the link generation fails (or if the alias specified is aleady taken.)
Branch.getInstance().getShortURLWithParams(params, andTags: ["version1", "trial6"], andChannel: "text_message", andFeature: BRANCH_FEATURE_TAG_SHARE, andStage: "level_6", andAlias: "AUSTIN68", andCallback: { (url: String!, error: NSError!) -> Void in
if (error == nil) {
// show the link to the user or share it immediately
}
})
如果您不想传递标签和数据,还有其他方法可以排除。探索Xcode的自动完成功能。
####参数 别名:链接的别名。
回调函数:在成功获取推广码对象或验证失败时被调用的回调,如果验证无效,则返回错误。
渠道:链接的渠道。例如,可以是Facebook、Twitter、短信等,取决于它将在哪里分享。
功能:生成的链接将关联的职能。
params:在构建Branch链接时使用的字典。
阶段:生成链接所用的阶段,表示用户在哪个漏斗步骤。
标签:要关联于链接的标签字符串数组。
注意:如果您想动态分享内容,可以通过使用数据字典中的以下以下可选键来自定义每个URL的Facebook OG标签。请使用此Facebook工具来调试您的OG标签。
键 | 值 |
---|---|
"$og_title" | 您希望在社会媒体链接中显示的标题。 |
"$og_description" | 您希望在社会媒体链接中显示的描述。 |
"$og_image_url" | 您希望在社会媒体链接中显示的图片URL。 |
"$og_video" | 视频的URL。 |
"$og_url" | 您希望显示的URL。 |
"$og_redirect" | 如果您想绕过我们的OG标签并使用自己的,请使用此键与包含您网站元数据的URL一起使用。 |
您可以通过在字典中插入以下可选键来实现自定义重定向
键 | 值 |
---|---|
"$desktop_url" | 在桌面或笔记本电脑上发送用户的地方。默认情况下是Branch托管"text-me"服务。 |
"$android_url" | 如果不安装应用,则将用户发送到应用商店的替换URL。只有当您要一个移动web启动时才必要。 |
"$ios_url" | 如果不安装应用,则将用户发送到应用商店的替换URL。只有当您要一个移动web启动时才必要。 |
"$ipad_url" | 与上面相同,但用于iPad商店。 |
"$fire_url" | 与上面相同,但用于Amazon Fire商店。 |
"$blackberry_url" | 与上面相同,但用于Blackberry商店。 |
"$windows_phone_url" | 与上面相同,但用于Windows商店。 |
"$after_click_url" | 当用户从应用返回浏览器时,将他们带到此URL。 仅限iOS;Android即将推出。 |
您可以通过在字典中插入以下可选键来控制每个链接的直接深度链接
键 | 值 |
---|---|
"$deeplink_path" | 我们附加到URI的深度链接路径的值。例如,您可以指定"$deeplink_path": "radio/station/456",然后我们将打开应用,URI为"yourapp://radio/station/456?link_click_id=branch-identifier"。这主要用于支持旧深度链接基础设施。 |
"$always_deeplink" | true或false。(默认不是首先深度链接)此键可以指定我们的链接服务试图强制打开应用,即使我们不确定用户是否有安装。如果没有安装应用,我们将退回到相应应用商店或$platform_url键。默认情况下,我们只有在已经看到一个用户从您的应用通过Branch链接开始会话(已被Branch烘焙和深度链接)时才会打开应用。 |
UIActivityView 分享面板
UIActivityView 是用户从您的应用中分享内容的标准方式。一个常见的用例是用户将优惠码或内容URL分享给朋友。如果您想为用户提供从应用中分享内容的方式,这是实施 Branch 的最简单方法。
示例 UIActivityView 分享面板
Branch iOS SDK 包含一个子类化的 UIActivityItemProvider,可以传递给 UIActivityViewController,这将生成 Branch 短链接,并自动将用户选择的通道(例如 Facebook、Twitter 等)打上标签。
注意:此方法之前是 getBranchActivityItemWithDefaultURL:,现已弃用。不再需要一个作为 UIActivityItemProvider 占位符的默认 URL,而是会立即实时同步生成 longURL。
包含在 Branch iOS SDK 中的示例应用展示了 ViewController.m 中的示例。
####方法
Objective-C
// Setup up the content you want to share, and the Branch
// params and properties, as you would for any branch link
// No need to set the channel, that is done automatically based
// on the share activity the user selects
NSString *shareString = @"Super amazing thing I want to share!";
UIImage *amazingImage = [UIImage imageNamed:@"Super-Amazing-Image.png"];
NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
[params setObject:@"Joe" forKey:@"user"];
[params setObject:@"https://s3-us-west-1.amazonaws.com/myapp/joes_pic.jpg" forKey:@"profile_pic"];
[params setObject:@"Joe likes long walks on the beach..." forKey:@"description"];
// Customize the display of the link
[params setObject:@"Joe's My App Referral" forKey:@"$og_title"];
[params setObject:@"https://s3-us-west-1.amazonaws.com/myapp/joes_pic.jpg" forKey:@"$og_image_url"];
[params setObject:@"Join Joe in My App - it's awesome" forKey:@"$og_description"];
// Customize the redirect performance
[params setObject:@"http://myapp.com/desktop_splash" forKey:@"$desktop_url"];
NSArray *tags = @[@"tag1", @"tag2"];
NSString *feature = @"invite";
NSString *stage = @"2";
// Branch UIActivityItemProvider
UIActivityItemProvider *itemProvider = [Branch getBranchActivityItemWithParams:params andFeature:feature andStage:stage andTags:tags];
// Pass this in the NSArray of ActivityItems when initializing a UIActivityViewController
UIActivityViewController *shareViewController = [[UIActivityViewController alloc] initWithActivityItems:@[shareString, amazingImage, itemProvider] applicationActivities:nil];
// Present the share sheet!
[self.navigationController presentViewController:shareViewController animated:YES completion:nil];
Swift
// Setup up the content you want to share, and the Branch
// params and properties, as you would for any branch link
// No need to set the channel, that is done automatically based
// on the share activity the user selects
var items: Array = [AnyObject]()
let shareString = "Super amazing thing I want to share!"
items.append(shareString)
if let amazingImage: UIImage = UIImage(named: "mada.png") {
items.append(amazingImage)
}
var params = ["user": "Joe"]
params["profile_pic"] = "https://s3-us-west-1.amazonaws.com/myapp/joes_pic.jpg"
params["description"] = "Joe likes long walks on the beach..."
// Customize the display of the link
params["$og_title"] = "Joe's My App Referral"
params["$og_image_url"] = "https://s3-us-west-1.amazonaws.com/myapp/joes_pic.jpg"
params["$og_description"] = "Join Joe in My App - it's awesome"
// Customize the redirect performance
params["$desktop_url"] = "http://myapp.com/desktop_splash"
let tags = ["tag1", "tag2"]
let feature = "invite"
let stage = "2"
// Branch UIActivityItemProvider
let itemProvider = Branch.getBranchActivityItemWithParams(params, andFeature: feature, andStage: stage, andTags: tags)
items.append(itemProvider)
// Pass this in the NSArray of ActivityItems when initializing a UIActivityViewController
let shareViewController = UIActivityViewController(activityItems: items, applicationActivities: nil)
// Present the share sheet!
self.navigationController?.presentViewController(shareViewController, animated: true, completion: nil)
####参数
功能:生成的链接将关联的职能。
params:在构建Branch链接时使用的字典。
阶段:生成链接所用的阶段,表示用户在哪个漏斗步骤。
标签:要关联于链接的标签字符串数组。
推荐系统奖励功能
在标准推荐系统中,您有两个参与者:原始用户和被邀请者。我们的系统足够灵活,可以处理所有用户任何行为的奖励。以下是一些示例场景
-
对执行某些操作(例如邀请、购买等)的原始用户进行奖励。
-
对通过原始用户的推荐链接安装应用的被邀请者进行奖励。
-
当被邀请者采取行动时(例如,当他们的邀请者购买某些商品时给原始用户积分)奖励原始用户。
这些奖励定义是在控制台“推荐”标签页下“奖励规则”部分创建的。有关更多信息,请参阅 [奖励](https://dev.branch.io/recipes/referral_links_with_incentives/#rewards) 部分。[文档门户](https://dev.branch.io/recipes/referral_links_with_incentives/#rewards)。
警告:对于促销活动,您不应为自定义事件使用唯一的奖品,并且不要使用预先识别的电话进行兑换。这可能会让用户欺骗系统。
获取奖励余额
当执行某些操作时(由您的规则定义),在后台,奖励余额会随机变化,因此您需要异步调用以检索余额。以下为语法
####方法
Objective-C
[[Branch getInstance] loadRewardsWithCallback:^(BOOL changed, NSError *error) {
// changed boolean will indicate if the balance changed from what is currently in memory
// will return the balance of the current user's credits
NSInteger credits = [[Branch getInstance] getCredits];
}];
Swift
Branch().loadRewardsWithCallback { (changed: Bool, error: NSError!) -> Void in
// changed boolean will indicate if the balance changed from what is currently in memory
// will return the balance of the current user's credits
let credits = Branch().getCredits()
}
####参数
回调:请求完成后将被调用的回调。
兑换所有或部分奖励余额(存储状态)
兑换积分允许用户兑换他们赚取的积分。成功兑换后,用户的余额将更新,反映扣除的金额。
####方法
Objective-C
// Save that the user has redeemed 5 credits
[[Branch getInstance] redeemRewards:5];
Swift
// Save that the user has redeemed 5 credits
Branch.getInstance().redeemRewards(5)
####参数 amount:要兑换的积分数量。
获取信用记录
此调用将检索个人用户的全部信用和兑换记录。使用此调用,请按以下方式实现
####方法
Objective-C
[[Branch getInstance] getCreditHistoryWithCallback:^(NSArray *history, NSError *error) {
if (!error) {
// process history
}
}];
Swift
Branch.getInstance().getCreditHistoryWithCallback { (history: [AnyObject]!, error: NSError!) -> Void in
if (error == nil) {
// process history
}
}
响应将返回一个解析自以下JSON的数组
[
{
"transaction": {
"date": "2014-10-14T01:54:40.425Z",
"id": "50388077461373184",
"bucket": "default",
"type": 0,
"amount": 5
},
"event" : {
"name": "event name",
"metadata": { your event metadata if present }
},
"referrer": "12345678",
"referree": null
},
{
"transaction": {
"date": "2014-10-14T01:55:09.474Z",
"id": "50388199301710081",
"bucket": "default",
"type": 2,
"amount": -3
},
"event" : {
"name": "event name",
"metadata": { your event metadata if present }
},
"referrer": null,
"referree": "12345678"
}
]
####参数
referrer : 进行此信用交易的推荐用户的id。如果没有涉及推荐人,返回null。注意,此id是开发者系统中之前传递给Branch的identify user API调用的用户id。
referree : 此信用交易中被推荐用户的id。如果没有涉及被推荐人,返回null。注意,此id是开发者系统中之前传递给Branch的identify user API调用的用户id。
type : 这是信用交易的类型。
- 0 - 由用户完成某个动作或促销活动自动添加的奖励。
- 1 - 手动添加的奖励。
- 2 - 通过我们的API或SDKs发生的信用兑换。
- 3 - 这是非常独特的情况,当我们检测到欺诈时,我们会自动扣除信用。
获取优惠码
检索当前用户创建的优惠码。
####方法
Objective-C
[[Branch getInstance] getPromoCodeWithCallback:^(NSDictionary *params, NSError *error) {
if (!error) {
NSString *promoCode = [params objectForKey:@"promo_code"];
}
}];
Swift
Branch.getInstance().getPromoCodeWithCallback { (params: [NSObject : AnyObject]!, error: NSError!) -> Void in
if (error == nil) {
let promoCode: AnyObject? = params["promo_code"]
}
}
####参数 callback:创建促销码对象时被调用的回调函数。
创建促销码
为当前用户创建一个新促销码,只有当该用户没有任何有效的促销码时。
在最简单的形式中,只需指定促销码的金额。返回的促销码是一个包含在键 @"promo_code" 的字典中的六位长唯一字母数字字符串。
####方法
Objective-C
// Create a promo code of 5 credits
[[Branch getInstance] getPromoCodeWithAmount:5
callback:^(NSDictionary *params, NSError *error) {
if (!error) {
NSString *promoCode = [params objectForKey:@"promo_code"];
// do whatever with promoCode
}
}
];
Swift
// Create a promo code of 5 credits
Branch.getInstance().getPromoCodeWithAmount(5, callback: { (params: [NSObject : AnyObject]!, error: NSError!) -> Void in
if (error == nil) {
let promoCode: AnyObject? = params["promo_code"]
// do whatever with promoCode
}
})
####参数
amount NSInteger:用户应用促销码时兑换的信用额度。
Alternatively, you can specify a prefix for the promo code. The resulting code will have your prefix, concatenated with a two character long unique alpha-numeric string wrapped in the same data structure.
####方法
Objective-C
// Create a promo code with prefix "BRANCH", 5 credits, and without an expiration date
[[Branch getInstance] getPromoCodeWithPrefix:@"BRANCH" // prefix should not exceed 48 characters
amount:5
callback:^(NSDictionary *params, NSError *error) {
if (!error) {
NSString *promoCode = [params objectForKey:@"promo_code"];
// do whatever with promoCode
}
}
];
Swift
// Create a promo code with prefix "BRANCH", 5 credits, and without an expiration date
// prefix should not exceed 48 characters
Branch.getInstance().getPromoCodeWithPrefix("BRANCH", amount: 5, callback: { (params: [NSObject : AnyObject]!, error: NSError!) -> Void in
if (error == nil) {
let promoCode: AnyObject? = params["promo_code"]
// do whatever with promoCode
}
})
####参数
prefix NSString* : 您希望促销码前的前缀。
如果您想为优惠码指定过期日期,可以添加“expiration:”参数。前缀参数是可选的,即可以是getPromoCodeWithAmount:expiration:andCallback。
####方法
Objective-C
[[Branch getInstance] getPromoCodeWithPrefix:@"BRANCH" // prefix should not exceed 48 characters
amount:5
expiration:[[NSDate date] dateByAddingTimeInterval:60 * 60 * 24]
callback:^(NSDictionary *params, NSError *error) {
if (!error) {
NSString *promoCode = [params objectForKey:@"promo_code"];
// do whatever with promoCode
}
}
];
Swift
// prefix should not exceed 48 characters
Branch.getInstance().getPromoCodeWithPrefix("BRANCH", amount: 5, expiration: NSDate().dateByAddingTimeInterval(60*60*24), callback: { (params: [NSObject : AnyObject]!, error: NSError!) -> Void in
if (error == nil) {
let promoCode: AnyObject? = params["promo_code"]
// do whatever with promoCode
}
})
####参数
expiration NSDate* : 优惠码的过期日期。
####方法
Objective-C
[[Branch getInstance] getPromoCodeWithPrefix:@"BRANCH" // prefix should not exceed 48 characters
amount:5
expiration:[[NSDate date] dateByAddingTimeInterval:60 * 60 * 24]
bucket:@"default"
usageType:BranchPromoCodeUsageTypeOncePerUser
rewardLocation:BranchPromoCodeRewardBothUsers
callback:^(NSDictionary *params, NSError *error) {
if (!error) {
NSString *promoCode = [params objectForKey:@"referral_code"];
// do whatever with promoCode
}
}
];
Swift
// prefix should not exceed 48 characters
Branch.getInstance().getPromoCodeWithPrefix("BRANCH",
amount: 5,
expiration: NSDate().dateByAddingTimeInterval(60*60*24),
bucket: "default",
usageType:BranchPromoCodeUsageTypeOncePerUser
rewardLocation:BranchPromoCodeRewardBothUsers,
callback: { (params: [NSObject : AnyObject]!, error: NSError!) -> Void in
if (error == nil) {
let promoCode: AnyObject? = params["promo_code"]
// do whatever with promoCode
}
})
####参数
您还可以通过以下附加参数调整优惠码的精度
bucket NSString* : 要使用的桶名称。如果没有指定,默认为'default'。
calculation_type PromoCodeCalculation : 这定义了优惠码是否可以无限期应用,或者每个用户只能应用一次。
- BranchUnlimitedRewards - 优惠码可以持续应用。
- BranchUniqueRewards - 用户只能应用特定的优惠码一次。
location PromoCodeLocation : 应用于应用优惠码的用户。
- BranchReferreeUser - 应用优惠码的用户获得积分。
- BranchReferringUser - 创建优惠码的用户获得积分。
- BranchBothUsers - 创建者和申请者都获得积分。
验证优惠码
验证优惠码是否存在于Branch系统中,并且仍然有效。如果以下条件满足,则代码有效:
- 尚未过期。
- 其计算类型为“唯一”时,尚未被当前用户应用。
- 如果类型是无限制的,只要尚未过期。
如果有效,回调中返回优惠码JSONObject。
####方法
Objective-C
[[Branch getInstance] validatePromoCode:code callback:^(NSDictionary *params, NSError *error) {
if (!error) {
if ([code isEqualToString:[params objectForKey:@"promo_code"]]) {
// valid
} else {
// invalid (should never happen)
}
} else {
NSLog(@"Error in validating promo code: %@", error.localizedDescription);
}
}];
Swift
Branch.getInstance().validatePromoCode(code, andCallback: { (params: [NSObject : AnyObject]!, error: NSError!) -> Void in
if (error == nil) {
if let returnedCode = params["promo_code"] as? String {
// valid
} else {
// invalid (should never happen)
}
} else {
NSLog(@"Error in validating promo code: %@", error.localizedDescription)
}
})
####参数
code NSString* : 验证促销代码。
应用促销代码
如果Branch系统中存在此促销代码且仍然有效(见上文),则应用促销代码。如果代码有效,则回调中返回促销代码JSONObject。
####方法
Objective-C
[[Branch getInstance] applyPromoCode:code callback:^(NSDictionary *params, NSError *error) {
if (!error) {
// applied. you can get the promo code amount from the params and deduct it in your UI.
} else {
NSLog(@"Error in applying promo code: %@", error.localizedDescription);
}
}];
Swift
Branch.getInstance().applyPromoCode(code, callback: { (params: [NSObject : AnyObject]!, error: NSError!) -> Void in
if (error == nil) {
// applied. you can get the promo code amount from the params and deduct it in your UI.
} else {
NSLog(@"Error in applying promo code: %@", error.localizedDescription);
}
})
####参数
code NSString* : 应用促销代码。