使用Telegram API制作Java桌面应用?

26

我对Java编程并不陌生,但从未使用过外部库等工具。现在我想为“Telegram”开源消息平台开发一个桌面客户端,但在API使用方面卡住了。

Telegram API有很多文档,可以在https://core.telegram.org/api找到。我已经从GitHub下载了mtproto、telegram-api和tl-core,并使用gradle从源代码编译了自己的库文件。此外,我已经编写了一个小应用程序,用户点击按钮后会提示输入手机号码,我正在使用Java-swing-Libraries和ActionListener进行操作。

现在需要检查用户输入的电话号码是否已注册,似乎可以使用auth.checkPhone方法进行验证。但是我该如何在eclipse项目中引用它呢?在任何类中都没有看到"checkPhone"方法!我该怎么办?

请帮帮我,我束手无策,陷入了困境。即使是一点提示也能帮助我。

提前感谢您, Lukas


1
嗨,你可以试着看一下我的问题链接:https://dev59.com/Qn7aa4cB1Zd3GeqPqHGu看看这是否有帮助。 :) - brain56
2个回答

19

基本上,您需要填写在GitHub上给出的代码中ex3ndr/telegram-api存储库中的空白部分。 如果您已经拥有构建的库Jar文件和Eclipse项目的Java构建路径上的tl-api-v12.jar文件,则请查看README中的RPC Calls部分

首先,您需要使用您的API凭据设置一个AppInfo对象,然后还需要创建一些实现AbsApiStateApiCallback接口的新类。 一旦这些可用,您就可以创建TelegramApi对象并向Telegram服务发出RPC调用,如下所示; 在这种情况下,使用建议的auth.checkPhone方法:

// TODO set up AbsApiState, AppInfo and ApiCallback objects
TelegramApi api = new TelegramApi(state, appInfo, apiCallback);

// Create request
String phoneNumber = "1234567890";
TLRequestAuthCheckPhone checkPhone = new TLRequestAuthCheckPhone(phoneNumber);

// Call service synchronously
TLCheckedPhone checkedPhone = api.doRpcCall(checkPhone);
boolean invited = checkedPhone.getPhoneInvited();
boolean registered = checkedPhone.getPhoneRegistered();
// TODO process response further
TelegramApi 对象代表与远程服务的连接,该服务是基于请求-响应方式的 API。RPC 调用通过 doRpcCall 方法进行,在该方法中使用来自 org.telegram.api.requests 包的请求对象(例如示例中的 TLRequestAuthCheckPhone 类型),并填充相应的参数。当结果可用时,将返回带有结果的响应对象(如上述的 TLCheckedPhone)。

对于异步调用,该方法会立即返回,并在结果可用时执行 onResult 回调方法:

// Call service aynchronously
api.doRpcCall(checkPhone, new RpcCallbackEx<TLCheckedPhone>() {
    public void onConfirmed() { }
    public void onResult(TLCheckedPhone result) {
        boolean invited = checkedPhone.getPhoneInvited();
        boolean registered = checkedPhone.getPhoneRegistered();
        // TODO process response further
    }
    public void onError(int errorCode, String message) { }
});

抱歉,我好久没有回复了。我放弃了这个项目,直到看到有人回答了我的旧帖子。我认为我已经理解了如何开始这个项目的大部分内容,但现在我卡在了“apiStorage”这一点上。在ex3ndr的GitHub页面的readme.md中,它说,“Telegram-Api”对象需要一个“ApiStorage”对象,由“new MyApiStorage”创建。但是我找不到“MyApiStorage”类,那我应该放什么呢? - LukeLR
1
此外,我无法使用gradle构建库。我从GitHub下载了资源,并按照readme中的说明重命名了文件夹,但是gradle总是失败并显示“*出了什么问题:无法确定任务':test'的依赖项。>找不到名称为'default'的配置。” 我不知道如何解决这个问题,你能帮忙吗?现在我已经将原始资源文件复制到我的eclipse项目中,但必须有一种方法来解决gradle的问题。感谢您提前的回答,Lukas - LukeLR
1
MyApiStorage 部分是比较复杂的。您需要创建一个实现 org.telegram.api.engine.storage.AbsApiState 接口的类,并将其用作构造函数的第一个参数。您的 IDE 应该能够帮助您构建一个骨架类,以便开始编写代码... - grkvlt
谢谢你的所有帮助,但我想放弃了,因为我不想每一步都问你...我找不到任何手册告诉我ApiStorage中的方法应该做什么,或者应用程序中的任何结构应该做什么,因此Telegram将不得不没有我的新客户端...如果有地方解释所有这些东西,我不知道如何理解,但telegram.org上的API文档甚至没有帮助我一秒钟...非常感谢你抽出时间回答我的问题,谢谢;) - LukeLR
1
你好grkvlt!我已经能够解决这个问题,但是我卡在了如何发送和接收消息的地方。请指导我如何继续。LukeLR,请查看telegram-bot示例应用程序!它可以解决你的一些问题! - ndomanyo
1
你好,我已经阅读并尝试实现这里给出的示例,但不幸的是它没有起作用。它还说我唯一需要做的就是填写示例应用程序中的空白,但似乎没有任何“空白”可供填写。命令行中的示例是用C编写的,所以我担心它不适用于我需要的情况。我解决了AbsApiState的问题,但我遇到了TimeoutException。同样,似乎其中一个超时是由Linux引起的(Java必须使用/dev/urandom而不是/dev/random),但之后我又遇到了另一个超时。抱歉,但这对我来说太多了。 - Raul Luna

0

虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,则仅有链接的答案可能会失效。 - slfan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接