私はTwilioをIPメッセージングに使用しています。私は私のモバイルハイブリッドアプリでチャットを作成したい、と私は、配信され、メッセージの状態を読むと、whatsupスタイルを取得しようとしています。 Twilioライブラリの最初の興奮の後、今は何も動作していません:(。チャットは40%の時間で動作しますが、何度かエラーが発生します。エラーを見る前に、 。問題IP-messaginとTwilio
アイデアは、一度ログインして、聞いて、そのユーザのすべてのチャンネルとself.channels
でそれらを格納することですので、私は、そのユーザーの最後の会話を視覚化することができます。
1)非常に最初のステップはあるが尋ねますユーザーが自分のアプリにログインするとすぐに
setChatToken = function()
{
_token = data.token;
var accessManager = new Twilio.AccessManager(_token);
_messagingClient = new Twilio.IPMessaging.Client(accessManager);
_messagingClient.on('channelUpdated', function(channel)
{
for (c in self.channels)
{
if (self.channels[c].sid == channel.sid)
{ self.channels[c] = channels; }
}
});
// return a promise;
}
2)それから私は、これはすべてのチャンネルを尋ねるためのコードである)
// init chat system
setChatToken()
.then(function()
{
// Listen for new invitations to your Client
_messagingClient.on('channelInvited', function(channel)
{
// Automatically join channels that you were invited to
channel.join().then(function(channel)
{
handleMessageEvents(channel);
channel.attributes['him'] = channel['createdBy'];
// I'll separate old, recent and new msgs
channel['recent-messages'] = [];
channel['new-messages'] = [];
self.last_channels.push(channel);
});
});
// asks all the channels
getChannels()
.then(function()
{ // chat init ready
self.ready = true;
});
}
)
.catch(function(err){console.error(err);});
3すべてのチャンネルをお願いします。 channel.lastConsumedMessageIndex
を見ている新しいメッセージがあるかどうかを確認します。最後の7つのメッセージは「最近」、もう1つは「古い」とみなされます。
var getChannels = function()
{
// Get Messages for previously created channels
_messagingClient.getChannels()
.then(function(channels)
{ // GET CHANNELS
for (i in channels)
{
var channel = channels[i];
channel['recent-messages'] = [];
channel['old-messages'] = [];
channel['new-messages'] = [];
handleMessageEvents(channel);
self.last_channels.push(channel);
}
})
.then(function()
{ // GET MEMBERS
var promises_update_read_index = [];
for (i in self.last_channels)
{
var channel = self.last_channels[i];
var promise =
channel.getMembers()
.then(function(channelMembers)
{
// check the last message read from the other user, to know
// if there are new messages not read
for(m in channelMembers)
{
var member = channelMembers[m];
if (member.identity != me.id)
{
channel.attributes['him'] = member.identity;
channel.attributes['hisLastMsgIndex'] = member.lastConsumedMessageIndex;
// last message consumed update
member.on('updated', function(updatedMember)
{
//handle the read status information for this member
updateHisMessageReadStatus(updatedMember.identity,
updatedMember.lastConsumedMessageIndex,
updatedMember.channel.sid);
});
}
else
{ // it's me
}
}
}
);
promises_update_read_index.push(promise);
}
return $q.all(promises_update_read_index);
})
.then(function()
{ //GET MESSAGES
var promises_update_messages = [];
for (i in self.last_channels)
{
var channel = self.last_channels[i];
//determine the newest message index
var areThereNewMsgs = false;
var lastConsumedMessageIndex = channel.lastConsumedMessageIndex;
// consider the last 7 messages as 'recent', the other as 'old'
var promise =
channel.getMessages(7)
.then(function(lastChannelMessages)
{
for (j in lastChannelMessages)
{
var message = lastChannelMessages[j];
if (
message.author != me.id &&
message.index > lastConsumedMessageIndex
)
{ // there are new messages
var hisId = channel.attributes['him'];
channel['new-messages'].push(message);
}
else
{
if (channel.attributes['hisLastMsgIndex']
< channel.lastConsumedMessageIndex
)
{ message['msg-read'] = false;}
else
{ message['msg-read'] = true; }
channel['old-messages'].push(message);
}
if (message.author != me.id)
{ message['msg-read'] = false; } //hide for him
}
});
promises_update_messages.push(promise);
}
return $q.all(promises_update_messages);
})
.catch(function(err){console.error('getMessages '+JSON.stringify(err));})
.then(function()
{
$rootScope.$broadcast(self.CHANNEL_UPDATE_EVENT);
deferred.resolve(true); // i'm ready
})
.catch(function(err)
{
console.error(err);
deferred.reject(err);
});
return deferred.promise;
}
チャンネルを作成すると、他のユーザーが自動的にチャンネルに参加しないことが多いため、配信されなかったメッセージを送信します。前に定義されたとおり、私はgetChannels()を呼び出す場合 別の問題は、
getMembers {"status":403,"description":"Forbidden","body":{"message":"Access forbidden","status":403}}
あります。
このような完全なチャットを作成するチュートリアルはありますか?それとも、あなたはどのようにチェックするために変更するかについての提案とを持っている問題
がクライアントに知られているよgetChannels()
を行う場合
よろしくお願いいたします...ありがとうございます。また、しばらくすると、Twilioがソケット接続に関するエラーを受け取ることがわかりました...私はそれが非アクティブの後にタイムアウトについて何かだと思います。そのエラーが発生すると、ユーザーはメッセージを受信できなくなります。接続を維持する方法はありますか? – DeLac
あなたは何もする必要はありません - 接続は生き続けるべきです。ライブラリのバグかもしれません。どのバージョンを使用していますか? – Serge