• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 解析 + PubNub : private chat

[复制链接]
菜鸟教程小白 发表于 2022-12-13 03:44:04 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我想与 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-推荐答案


虽然是在 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap