ObjectiveDDP 0.2.0

ObjectiveDDP 0.2.0

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2017年8月

Jesse BoundsMichael Arthur 维护。



 
依赖
SocketRocket= 0.4.1
M13OrderedDictionary>= 0
 

  • 作者
  • Jesse Bounds

Build Status

将您的用 Objective-C 或 Swift 编写的 iOS/OSX 应用连接到使用 Meteor 创建的 DDP 协议进行通信的服务器应用,并且如果您的服务器需要的话,对其进行身份验证。

Note:
supports meteor 0.8.2 and above.
If you need to migrate please see the srp-upgrade-support branch
现在支持 OAuth(Facebook 和其他服务)[实验性]

这不支持,所以如果它吃了你的猫或破坏了任何数据,请不要哭泣!

(void)logonWithOAuthAccessToken: (NSString *)accessToken serviceName: (NSString *) serviceName responseCallback: (MeteorClientMethodCallback)responseCallback;

请要求您的 meteor 服务器使用以下项目,以便此功能能够工作。

https://github.com/jasper-lu/facebook-ddp

希望 meteor 会在未来原生支持此功能 https://github.com/meteor/meteor/pull/3515

内部内容

ObjectiveDDP 应该能在使用 ARC 和 iOS 7.1 或以上版本的 iOS 项目中运行良好。请参阅 示例应用项目维基 获取更多信息。以下是预览:

加载库并连接到 meteor 服务器
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.meteorClient = [[MeteorClient alloc] init];
    [self.meteorClient addSubscription:@"awesome_server_mongo_collection"];
    ObjectiveDDP *ddp = [[ObjectiveDDP alloc] initWithURLString:@"wss://awesomeapp.meteor.com/websocket" delegate:self.meteorClient];
    self.meteorClient.ddp = ddp;
    [self.meteorClient.ddp connectWebSocket];
}
使用用户名注册
[self.meteor signupWithUsername:self.username.text password:self.password.text fullname:self.fullname responseCallback:^(NSDictionary *response, NSError *error) {
    if (error) {
        [self handleFailedAuth:error];
        return;
    }
    [self handleSuccessfulAuth];
}];

或使用电子邮件

[self.meteor signupWithEmail:self.email.text password:self.password.text fullname:self.fullname.text responseCallback:^(NSDictionary *response, NSError *error) {
    if (error) {
        [self handleFailedAuth:error];
        return;
    }
    [self handleSuccessfulAuth];
}];

或使用两者

[self.meteor signupWithUsernameAndEmail:self.username.text email:self.email.text password:self.password.text fullname:self.fullname.text responseCallback:^(NSDictionary *response, NSError *error) {
    if (error) {
        [self handleFailedAuth:error];
        return;
    }
    [self handleSuccessfulAuth];
}];
使用身份验证登录
[self.meteor logonWithUsername:self.username.text password:self.password.text responseCallback:^(NSDictionary *response, NSError *error) {
    if (error) {
        [self handleFailedAuth:error];
        return;
    }
    [self handleSuccessfulAuth];
}];

或使用电子邮件

[self.meteor logonWithEmail:self.email.text password:self.password.text responseCallback:^(NSDictionary *response, NSError *error) {
    if (error) {
        [self handleFailedAuth:error];
        return;
    }
    [self handleSuccessfulAuth];
}];

或者如果您接受两种方式:

[self.meteor logonWithUsernameOrEmail:self.usernameOrEmail.text password:self.password.text responseCallback:^(NSDictionary *response, NSError *error) {
    if (error) {
        [self handleFailedAuth:error];
        return;
    }
    [self handleSuccessfulAuth];
}];
在服务器上调用远程功能
[self.meteor callMethodName:@"sayHelloTo" parameters:@[self.username.text] responseCallback:^(NSDictionary *response, NSError *error) {
    NSString *message = response[@"result"];
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Meteor Todos"
                                                    message:message
                                                   delegate:nil
                                          cancelButtonTitle:@"Great"
                                          otherButtonTitles:nil];
    [alert show];
}];
监听 meteor 发送的关于之前已订阅的集合的更新
- (void)viewWillAppear:(BOOL)animated {
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(didReceiveAddedUpdate:)
                                                 name:@"awesome_server_mongo_collection_added"
                                               object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(didReceiveRemovedUpdate:)
                                                 name:@"awesome_server_mongo_collection_removed"
                                               object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(didReceiveChangeUpdate:)
                                                 name:@"awesome_server_mongo_collection_changed"
                                               object:nil];
}
向 meteor 服务器发送 CRUD 更新以更改集合
NSString *message = @"I am the walrus";
NSString *anId = [[NSUUID UUID] UUIDString];
NSArray *parameters = @[@{@"_id": anId,
                          @"msg": message,
                          @"owner": self.userId,
                          @"info": self.importantInformation}];

// add a document
[self.meteor callMethodName:@"/awesome_server_mongo_collection/insert"
                 parameters:parameters
           responseCallback:nil];

// then remove it
[self.meteor callMethodName:@"/awesome_server_mongo_collection/remove"
                 parameters:@[@{@"_id": anId}]
           responseCallback:nil];
监听通知

客户端连接就绪通知 - 当服务器响应接受 DDP 协议版本进行通信时,在此之前您无法调用任何与 meteor 的方法

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reportConnection) name:MeteorClientDidConnectNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reportConnectionReady) name:MeteorClientConnectionReadyNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reportDisconnection) name:MeteorClientDidDisconnectNotification object:nil];

许可证

MIT