BFGCallbackRouter 1.0.1

BFGCallbackRouter 1.0.1

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布最后发布2015年2月

Craig Pearlman维护。



目的

BFGCallbackRouter 是 Objective-C 中针对 iOS 应用实现 x-callback-url 1.0 初稿规范的方案。本意是创建一个简单、轻量和灵活的实现。

概述

路由器最好放在您应用程序的应用委托中,并将其作为属性保留。

#import "BFGCallbackRouter.h"

…

@property (nonatomic, strong) BFGCallbackRouter *router;

…

@synthesize router;

…

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.

    self.router = [[BFGCallbackRouter alloc] init];
}

添加行为

可以使用三种方法之一将行为添加到路由器中。

- (void)addAction:(NSString *)action scheme:(NSString *)scheme notificationName:(NSString *)notificationName;
- (void)addAction:(NSString *)action scheme:(NSString *)scheme delegate:(id<BFGCallbackDelegate>)delegate;
- (void)addAction:(NSString *)action scheme:(NSString *)scheme handler:(BFGCallbackActionHandler)handler;

行为是从您的 URL 中的 x-callback-url 行为参数中的名称。在 app://x-callback-url/foo 中,行为是 foo。方案是您的应用程序的 URL 方案(在上面的示例中,为 app)。路由器支持多个 URL 方案,如果您的应用程序需要它(或正在实现一个库或具有排除自己方案且需要集成的库或框架,如 TextExpander touch SDK)。

通过通知添加行为

如果您调用 notificationName 变体的 -addAction,则您指定的名称将是在收到回调时发布的通知的名称。发送的 NSNotification 对象的 object 属性将包含代表发送的回调参数的 BFGCallback 对象。(下面将详细介绍。)

[self.router addAction:@"foo" scheme:@"scheme" notificationName:@"ApplicationDidReceiveFooActionNotification"];

通过代理添加行为

调用 delegate 变体的 -addAction 期望一个符合 BFGCallbackDelegate 协议的对象的引用。该协议要求对象实现一个 必需 方法:签名 - (void)handleCallback:(BFGCallback *)callback-handleCallback:。要代理的方法的参数将代表发送的回调参数的 BFGCallback 对象。(下面将详细介绍。)

[self.router addAction:@"bar" scheme:@"scheme" delegate:(BFGCallbackDelegate *)self.window.rootViewController];

通过代码块添加行为

最后,调用 handler 变体的 -addAction 需要一个符合 BFGCallbackActionHandlervoid(^BFGCallbackActionHandler)(BFGCallback *callback) 的代码块。发送到代码块的 BFGCallback 对象是代表发送的回调参数的对象。(下面将详细介绍。)

[self.router addAction:@"foo" scheme:@"scheme" handler:^(BFGCallback *callback) {
    // do stuff here
}];

发送到应用的路由URL

在您的应用代理中的 -application:openURL:sourceApplication:annotation: 方法中,调用 BFGCallbackRouter-routeURL:errorHandler: 方法

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    [self.router routeURL:url errorHandler:^(BFGCallbackError error) {
        [self showAlertWithTitle:@"Callback Error" message:[NSString stringWithFormat:@"Invalid URL callback (%ld).", (long)error]];
    }];

    return YES;
}

- (void)showAlertWithTitle:(NSString *)title message:(NSString *)message {
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:title
                                                                   message:message
                                                            preferredStyle:UIAlertControllerStyleAlert];

    [alert addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:NULL]];

    [self.window.rootViewController presentViewController:alert animated:YES completion:NULL];
}

BFGCallbackError 是一个包含不同错误值的 enum,如果您需要针对特定的错误采取行动。

BFGCallback 对象

BFGCallback 对象包含从回调接收到的所有信息,并具有以下属性

  • sourceURL,这是发送到应用的完整URL
  • action,这是 x-callback-url 操作的名称
  • source,如果存在,包含 x-source 参数的值
  • onSuccess,如果存在,包含 x-success 参数的值
  • onCancel,如果存在,包含 x-cancel 参数的值
  • onError,如果存在,包含 x-error 参数的值
  • parameters,包含一组任何其他URL查询参数的字典,其中已移除x-callback-url参数

处理回调

BFGCallback 对象还具有三个方法来处理x-success、x-cancel和x-error回调。

- (BOOL)performOnSuccessCallbackWithAdditionalParameters:(NSDictionary *)additionalParameters;
- (BOOL)performOnCancelCallback;
- (BOOL)performOnErrorCallbackWithCode:(NSInteger)code message:(NSString *)message;

要执行适当的回调,请调用相应的回调方法。成功回调允许您向URL添加额外参数,例如返回值或来自您的应用的其他输出参数。错误回调接受用于设置标准 errorCodeerrorMessage 参数的值,这些参数用于 x-error 参数。

每个方法返回一个 BOOL 值,指示回调是否成功或由于某些URL处理错误而无法完成,如果您需要对成功或失败采取行动。

要求

BFGCallbackRouter 需要 iOS 8.1,尽管它可能在旧版的iOS中工作(未经测试)。

安装

BFGCallback.[hm]BFGCallbackRouter.[hm] 复制到您的项目中。

Swift

该库应通过与桥接头一起使用Swift而正常工作(未经测试)。

已知问题

  • 目前没有。

许可证

BFGCallbackRouter 在MIT许可证下授权。虽然您没有任何义务在应用程序中归因于库的使用,但归因于使用库是受欢迎的。

联系方式

如果您遇到任何问题,请在Twitter上找到我,Twitter名为@blackfog@blackfoggames。您也可以通过 craig at blackfoginteractive dot com 发送电子邮件给我。