我不知道这个问题有多具体,但我会冒险。
目前我正在学习 Java 和 Android,我对如何制作即时消息应用程序感到好奇。
我猜有与服务器的连接。但除此之外我什么都不知道。
我的问题是我需要知道什么样的技术/编程语言/科目才能自己创建一个?(功能类似于whatsapp的应用程序。我以为是php,但我不知道)。
我真的很感激一个广泛的答案,它将向我解释我会很好地理解我必须做什么和学习并知道如何制作一个。谢谢!
简单的 Android 即时消息应用程序 简单,因为它不是一种面向最终用户的应用程序。
这是一个运行在Android上的简单IM应用程序,应用程序向服务器发出http请求,在php和mysql中实现,进行身份验证、注册和获取其他朋友的状态和数据,然后通过以下方式与其他设备中的其他应用程序通信套接字接口。
功能 用户注册 用户认证 通过用户名添加新朋友 批准朋友 与列表中的朋友发送消息(当然) 显示在线和离线用户 运行后台服务以便即使在应用程序关闭时也能获取消息。收到新消息时使用通知区域。退出应用程序(杀死后台服务) 如何让它运行 有一个名称为 Server 的文件夹,将 Server 文件夹下的所有文件复制到您的 Web 服务器目录中的一个文件夹中,例如 android_im 可以通过http://192.168.7.5/android_im/
(192.168.7.5
是运行 apache 和 mysql 的计算机的 IP 地址,使用本地网络 IP 地址而不是使用 localhost 或 127.0.0.1) 打开 index.php 并输入数据库连接参数,如主机、用户名、密码等。写入 error_reporting(0)在 index.php 顶部创建 mysql 数据库中的表
CREATE TABLE `friends` (
`Id` int(10) unsigned NOT NULL auto_increment,
`providerId` int(10) unsigned NOT NULL default '0',
`requestId` int(10) unsigned NOT NULL default '0',
`status` binary(1) NOT NULL default '0',
PRIMARY KEY (`Id`),
UNIQUE KEY `Index_3` (`providerId`,`requestId`),
KEY `Index_2` (`providerId`,`requestId`,`status`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='providerId is the Id of the users who wish to be friend with';
CREATE TABLE `users` (
`Id` int(10) unsigned NOT NULL auto_increment,
`username` varchar(45) NOT NULL default '',
`password` varchar(32) NOT NULL default '',
`email` varchar(45) NOT NULL default '',
`date` datetime NOT NULL default '0000-00-00 00:00:00',
`status` tinyint(3) unsigned NOT NULL default '0',
`authenticationTime` datetime NOT NULL default '0000-00-00 00:00:00',
`userKey` varchar(32) NOT NULL default '',
`IP` varchar(45) NOT NULL default '',
`port` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`Id`),
UNIQUE KEY `Index_2` (`username`),
KEY `Index_3` (`authenticationTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
在socketOperator中设置AUTHENTICATION_SERVER_ADDRESS,它必须是服务器文件夹所在的地址,例如我们的例子是http://192.168.7.5/android_im/
(不要使用localhost)
然后使用 ADT 插件在 Eclipse 中运行您的应用程序。
可以学习如何安装Android SDK和ADT插件
每个应用程序打开一个随机端口(超过 10000 个)进行侦听,需要端口转发来与应用程序通信。可以了解到应用程序在“用户”表中打开的端口号是多少。
如果要在同一台计算机上运行应用程序,请删除 imService 中 sendmessage 函数中 //IP=10.0.2.2 行的斜杠。然后你需要端口转发。让我举个例子,例如 user1 使用端口号 12345 登录 emulator-5554,而 user2 使用端口号 54321 登录 emulator-5556
然后发出这些命令
adb -s emulator-5554 转发 tcp:12345 tcp:12345
adb -s emulator-5556 转发 tcp:54321 tcp:54321