我想与 Parse 和 Pubnub 进行私有(private)聊天。
当用户收到另一个 friend 的图片时,他可以点击“通过消息回复”,打开一个新 View ,这是两个 friend 之间的私有(private)聊天。
我在框架中使用“BubbleView”来提供 iOS 消息传递方面。
如何在 Pubnub 中创建私有(private) channel ?
我添加了
PFUser *user = [PFUser currentUser];
channel = [PNChannel channelWithName:user.objectId];
但这仅影响使用该应用程序的用户的 channel ,而不影响 2 个人的 channel ...?
使用我的代码,我可以收到自己的消息,控制台说:
PubNub (xxxxxxxxxx) 订阅 channel : (
“PNChannel(xxxxxxxxx)objectID(来自解析的用户正在使用该应用程序)”
收到的消息:我发送的消息
这是我的代码:
ChatViewController.h:
#import "MessagesViewController.h"
#import "NImports.h"
@interface ChatViewController : MessagesViewController
@property (strong, nonatomic) NSMutableArray *messages;
@end
ChatViewController.m:
#import "ChatViewController.h"
#import <arse/Parse.h>
@interface ChatViewController ()
@end
PNChannel *channel;
id message;
NSDate *receiveDate;
NSString *text;
@implementation ChatViewController
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = @"Messages";
self.messages = [[NSMutableArray alloc] initWithObjects:
@"Testing some messages here.", @"lol",
nil];
UIButton *exitButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[exitButton addTarget:self actionselector(backToInboxView) forControlEvents:UIControlEventTouchUpInside];
[exitButton setTitle"Inbox" forState:UIControlStateNormal];
exitButton.frame = CGRectMake(0.0, 0.0, 60, 60);
[self.view addSubview:exitButton];
// #1 Define client configuration
PNConfiguration *myConfig = [PNConfiguration configurationForOrigin"pubsub.pubnub.com"
publishKey"demo"
subscribeKey"demo"
secretKey:nil];
// #2 make the configuration active
[PubNub setConfiguration:myConfig];
// #3 Connect to the PubNub
[PubNub connect];
}
#pragma mark - Table view data source
- (NSInteger)tableViewUITableView *)tableView numberOfRowsInSectionNSInteger)section
{
return self.messages.count;
}
#pragma mark - Messages view controller
- (BubbleMessageStyle)messageStyleForRowAtIndexPathNSIndexPath *)indexPath
{
return (indexPath.row % 2) ? BubbleMessageStyleIncoming : BubbleMessageStyleOutgoing;
}
- (NSString *)textForRowAtIndexPathNSIndexPath *)indexPath
{
return [self.messages objectAtIndex:indexPath.row];
}
- (void)sendPressedUIButton *)sender withText:text
{
[self.messages addObject:text];
if((self.messages.count - 1) % 2)
[MessageSoundEffect playMessageSentSound];
else
[MessageSoundEffect playMessageReceivedSound];
PFUser *user = [PFUser currentUser];
channel = [PNChannel channelWithName:user.objectId];
// Receive Messages Sent to Me!
[PubNub subscribeOnChannel:channel];
// Send a Message to Sally
[PubNub sendMessage:text toChannel:channel];
[self finishSend];
}
- (void)backToInboxView{
[self.navigationController popToRootViewControllerAnimated:YES];
}
@end
在 Appdelegate.m 中:
- (void)pubnubClientPubNub *)client didSubscribeOnChannelsNSArray *)channels {
NSLog(@"DELEGATE: Subscribed to channel:%@", channels);
}
- (void)pubnubClientPubNub *)client didReceiveMessagePNMessage *)message {
NSLog(@"Message received: %@", message.message);
}
Best Answer-推荐答案 strong>
虽然是在 JavaScript 中,但这是一个非常详细的教程,介绍了如何使用 PubNub 实现聊天功能(带有私有(private) + 公共(public) channel ):
http://www.pubnub.com/blog/javascript-private-chat-api-with-access-control/
PubNub ObjectiveC 客户端具有相同的功能。
仅 PubNub channel 只是 channel - channel 上没有属性可以说明 channel 是私有(private)的还是公共(public)的。要模拟“私有(private)”,您可以为私有(private) channel 创建难以猜测的名称(并且不要公开这些名称),但随着时间的推移,这并不是最安全的解决方案。
要真正将 PubNub channel 设为私有(private),请使用 PAM 功能(如教程中所述)。这将允许您向特定 channel 授予和撤销授权 token ,因此即使有人猜到了私有(private) channel 名称,他们也无法在不知道身份验证 token 的情况下访问它。
要进一步锁定它,您可以使用内置加密,并且通过安全 (SSL) PubNub 连接运行,您将获得一个非常安全且可扩展的解决方案。
关于ios - 解析 + PubNub : private chat,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/27256313/
|