cookie启用安全传输_如何通过安全通信启用AI

cookie启用安全传输

This article was created in partnership with BlackBerry. Thank you for supporting the partners who make SitePoint possible.

本文是与BlackBerry合作创建的。 感谢您支持使SitePoint成为可能的合作伙伴。

Imagine a healthcare platform that designs the perfect treatment plan for a patient based on their medical history. Picture a chatbot that automatically generates legal appeals or resolves customer disputes in minutes.

想象一下一个医疗平台,该平台可以根据患者的病史为患者设计完美的治疗计划 。 想象一个聊天机器人可以在几分钟内自动产生法律上诉解决客户纠纷

This technology already exists today, and it is just the beginning. Alongside the Enterprise of Things, we are on the verge of a second revolution. Artificial intelligence will change everything, from how we protect ourselves from cyberattacks to how we go about our daily lives. And according to Tata Consultancy Services, 84% of businesses believe AI will be essential for businesses if they are not to fall behind.

这项技术今天已经存在,这仅仅是开始。 与物联网一起 ,我们正处于第二次革命的边缘。 人工智能将改变一切,从我们保护自己免受网络攻击的方式我们日常生活的方式 。 根据塔塔咨询服务公司(Tata Consultancy Services)的数据, 84%的企业认为,如果不落后于AI,人工智能对企业至关重要

打造更智能的企业-人工智能和应用开发 (Building A Smarter Enterprise – Artificial Intelligence and App Development)

Application development will be the foundation of the move towards artificial intelligence. Businesses that integrate AI into their apps will be able to provide new services and a better, more personalized user experience. They will be able to gain deeper insights into how their customers think and act, and open new revenue streams through those insights.

应用程序开发将成为迈向人工智能的基础。 将AI集成到其应用程序中的企业将能够提供新服务和更好,更个性化的用户体验 。 他们将能够深入了解客户的想法和行为,并通过这些见解打开新的收入来源。

Moreover, artificial intelligence will power new, transformative interactions between people, machines, and the Internet of Things.

而且,人工智能将推动人,机器和物联网之间新的,变革性的交互。

Through AI-driven analysis, businesses will gain a deeper understanding of their market and their staff. Automation will allow workers to respond proactively to customer complaints or security incidents, boost productivity, reduce costs, and minimize employee error. And through machine learning, businesses will be able to make better, more informed decisions than ever before.

通过AI驱动的分析,企业将对他们的市场和员工有更深入的了解。 自动化将使员工能够主动响应客户的投诉或安全事件,提高生产率,降低成本,并最大程度地减少员工错误。 通过机器学习,企业将能够做出比以往任何时候都更好,更明智的决策。

In time, people will demand such capabilities. Next-generation apps and services will be expected to not only support human-to-human interactions, but also human-to-machine and machine-to-machine interactions. Just as mobile apps are critical to business success today, artificial intelligence will be critical to success very soon.

随着时间的流逝,人们将需要这种能力。 预计下一代应用和服务不仅将支持人与人之间的交互,而且还将支持人与机器之间以及机器与机器之间的交互。 就像今天的移动应用对于企业的成功至关重要一样,人工智能将很快对成功至关重要。

克服企业AI的障碍 (Getting Past The Roadblocks to Enterprise AI)

Though most businesses acknowledge artificial intelligence’s importance, AI remains elusive. The issue is primarily one of complexity and cost. In a 2017 study by Infosys, 72% of IT professionals found time constraints were a roadblock to AI adoption, while 71% referenced financial limitations. Resistance to change and a lack of clarity around AI’s value were also hindrances.

尽管大多数企业都承认人工智能的重要性,但人工智能仍然难以捉摸。 问题主要是复杂性和成本之一 。 在Infosys2017年进行的一项研究中 ,有72%的IT专业人员发现时间限制是采用AI的障碍,而71%的人则提到了财务限制。 对变革的抵制和对AI价值缺乏清晰性也是障碍。

Even for businesses that manage to overcome those challenges, security remains a core issue. AI apps will routinely deal with sensitive data such as customer information, internal messages, login credentials, usage details, and even intellectual property. Left unencrypted, such services could leak that data into the wrong hands.

即使对于设法克服这些挑战的企业,安全性仍然是核心问题。 AI应用程序将常规处理敏感数据,例如客户信息,内部消息,登录凭证,使用详细信息,甚至是知识产权。 如果不进行加密,此类服务可能会将数据泄漏给错误的人。

Communications Platform as a Service (CPaaS) tools are central to overcoming these challenges. By integrating real-time communications into their apps – and tying that functionality to its AI services – developers allow for better, deeper interactions between AI and user. More importantly, with the right CPaaS solution, they ensure those interactions are kept secure, and that the AI does not leak critical data.

通信平台即服务(CPaaS)工具对于克服这些挑战至关重要。 通过将实时通信集成到他们的应用程序中,并将该功能与其AI服务相关联,开发人员可以在AI与用户之间进行更好,更深入的交互。 更重要的是,使用正确的CPaaS解决方案,它们可以确保这些交互保持安全,并且AI不会泄漏关键数据。

BBM Enterprise SDK如何使您的应用更智能 (How The BBM Enterprise SDK Makes Your Apps Smarter)

Here’s where the BBM Enterprise SDK comes in for Android, iOS, and Web. A secure CPaaS platform built on BlackBerry’s strength in secure mobile messaging, it gives your developers everything they need to incorporate secure, enterprise-grade messaging functionality in their apps. You can use commonly used identity and user management providers to make development even easier.

这是用于Android,iOS和Web的BBM Enterprise SDK的来源。 一个基于BlackBerry在安全移动消息传递方面的优势的安全CPaaS平台,它为开发人员提供了将安全的企业级消息传递功能集成到其应用程序中所需的一切。 您可以使用常用的身份和用户管理提供程序来简化开发。

More importantly, it offers several features that directly empower artificial intelligence:

更重要的是,它提供了直接支持人工智能的若干功能:

  • Embedded voice, video, chat. Enable your users to reach out to anyone around the world and be reached they want, whether for emergency communications, peer-to-peer collaboration, or by receiving personalize support services.

    嵌入式语音,视频,聊天。 通过紧急通信,对等协作或通过接收个性化支持服务,使您的用户可以与世界各地的任何人联系并得到他们想要的信息。

  • Publish/Subscribe Services. Create channels which broadcast to subscribing users. This keeps them updated on all new activity in a collaboration space, whether by another user or from the machine-readable information your application consumes.

    发布/订阅服务。 创建向订阅用户广播的频道。 这可以使他们在协作空间中的所有新活动上保持最新状态,无论是其他用户还是应用程序使用的机器可读信息。

  • Chatbots and Routing Services. Provide real-time support for your users via a chatbot which can process their data, activity, and messages. This information is then used to route them to the correct contact.

    聊天机器人和路由服务。 通过聊天机器人为用户提供实时支持,该聊天机器人可以处理他们的数据,活动和消息。 然后,此信息用于将其路由到正确的联系人。

  • AI-Driven Predictive Analytics. AI algorithms enable behind-the-scenes user empowerment, delivering relevant information to users when they need it. These include location-based alerts or suggested actions based on user behavior.

    AI驱动的预测分析。 AI算法可实现幕后用户授权,并在需要时向用户提供相关信息。 这些包括基于位置的警报或基于用户行为的建议操作。

  • Secure IoT Data Sharing. Eliminate the worry of cached copies or “fingerprints in the cloud” that could compromise privacy while also supporting real-time data sharing across all endpoints – human and machine.

    安全的物联网数据共享。 消除了担心缓存副本或“云中的指纹”可能会损害隐私的担忧,同时还支持跨所有端点(人机之间)进行实时数据共享。

We suggest that you first download the free SDK and familiarize yourself with the BBM Enterprise SDK with Blackberry’s Getting Started Guide.

我们建议您首先下载免费的SDK,并通过Blackberry的《 入门指南》熟悉BBM Enterprise SDK。

Now that you’re ready, let’s dive into some examples that can help you get started with your AI journey…

现在您已经准备好,让我们深入研究一些示例,这些示例可以帮助您开始进行AI之旅...

如何通过白板创建数据流 (How to Create Data Streams via Whiteboarding)

This example shows how you can send arbitrary data in a BBM Enterprise SDK chat to create a shared whiteboard that allows us to do the following:

本示例说明了如何在BBM Enterprise SDK聊天中发送任意数据以创建共享白板,使我们可以执行以下操作:

  • Create new whiteboards with one or more users

    与一个或多个用户创建新的白板
  • Share pictures and markup

    分享图片和标记
  • Clear the whiteboard

    清除白板

This example builds on the Basic Setup that uses Google OpenID Connect. Note: To use the Whiteboard example, you must complete the setup steps in the Prerequisites section.

本示例基于使用Google OpenID Connect的基本设置 。 注意:要使用“白板”示例,您必须完成“ 先决条件”部分中的设置步骤。

先决条件 (Prerequisites)

Visit the Getting Started with Android section to see the minimum requirements.

请访问Android入门部分,以了解最低要求。

To use this example, you must set up the following elements:

要使用此示例,您必须设置以下元素:

  • Local keystore file

    本地密钥库文件
  • Client_server_id

    Client_server_id
  • Your BBM Enterprise SDK user domain.

    您的BBM Enterprise SDK用户域。

You can copy these elements from the google-services.json file, and paste them into the app.properties file. The values for these elements are as follows:

您可以从google-services.json文件复制这些元素,然后将其粘贴到app.properties文件中。 这些元素的值如下:

  • client_server_id = “client_info” : “client_id”

    client_server_id =“ client_info”:“ client_id”
  • user_domain=”your user domain”

    user_domain =“您的用户域”

笔记 (Notes)

  1. The Google web documentation contains an error: when creating an OAuth 2.0 client, you also must create an OAuth 2.0 client with the Application Type set to Android. You will need to input the SHA of your own keystore to complete the client ID (see note 2). Once complete, remember to download the google-services.json file again.

    Google网络文档包含一个错误:创建OAuth 2.0客户端时,您还必须创建“应用程序类型”设置为Android的OAuth 2.0客户端。 您将需要输入自己的密钥库的SHA来完成客户机ID(请参阅注释2)。 完成后,请记住再次下载google-services.json文件。
  2. You must create your own signing key. The Whiteboard example is setup to use a single signing key for both debug & release. To create your own signing key, visit https://developer.android.com/studio/publish/app-signing.html. The SHA value is required to create an OAuth 2.0 client ID for a mobile device.

    您必须创建自己的签名密钥。 白板示例设置为使用单个签名密钥进行调试和发布。 要创建自己的签名密钥,请访问https://developer.android.com/studio/publish/app-signing.html 。 SHA值是创建移动设备的OAuth 2.0客户端ID所必需的。

This application has been built using gradle 2.14.1 (newer versions have not been validated)

已使用gradle 2.14.1构建此应用程序(尚未验证较新版本)

入门 (Getting Started)

The BBM Enterprise SDK can be used to send more than just text messages. The BBM Enterprise SDK supports sending opaque JSON content within a chat message. This example sends pictures and simple markup to create a shared whiteboard experience.

BBM Enterprise SDK不仅可以发送短信,还可以发送更多信息。 BBM Enterprise SDK支持在聊天消息中发送不透明的JSON内容。 本示例发送图片和简单标记以创建共享的白板体验。

发送涂鸦 (Sending a Doodle)

Doodles drawn by the user are sent in the data section of a ChatMessage. To send the doodle we convert the bitmap into a base 64 encoded string. The encoded image content, size and position are written into a JSON object. The JSON object is set in the ChatMessageSend.

用户绘制的涂鸦在ChatMessage数据部分中发送 。 为了发送Doodle,我们将位图转换为以64为基数的字符串。 编码的图像内容,大小和位置将写入JSON对象。 JSON对象在ChatMessageSend中设置。

Tip: ChatMessages can be up to 70KB in size, See ChatMessageSend#data

提示:ChatMessage的最大大小为70KB,请参阅ChatMessageSend#data

First compress the bitmap we captured of the users input and encode it as a base64 string. The bitmap is always compressed as a PNG first, if the size is still outside our bounds its compressed as a JPEG.

首先压缩我们捕获的用户输入的位图,并将其编码为base64字符串。 如果位图大小仍然超出我们的范围,则始终将其首先压缩为PNG。

baos = new ByteArrayOutputStream();
Bitmap.CompressFormat format;
if (shrinkCount == 0) {
    format = Bitmap.CompressFormat.PNG;
} else {
    format = Bitmap.CompressFormat.JPEG;
}
bmp.compress(format, imgQuality, baos);

//before doing the base 64 first check the compressed bytes to avoid wasted effort creating larger base 64 copy
if (baos.size() < maxSize) {
    dataBytes = baos.toByteArray();
    dataEnc = Base64.encodeToString(dataBytes, Base64.DEFAULT);
    tooBig = dataEnc.length() > (68 * 1024);
}

Create a JSON object that includes the encoded image data and the size and position in the canvas.

创建一个JSON对象,其中包括编码后的图像数据以及画布中的大小和位置。

jsonObject.put(CHAT_MESSAGE_DATA_KEY_DOODLE_PNG_BYTES, dataEnc);
//send the width to allow UI to determine size quicker than loading image
jsonObject.put(CHAT_MESSAGE_DATA_KEY_DOODLE_WIDTH, bmp.getWidth());
jsonObject.put(CHAT_MESSAGE_DATA_KEY_DOODLE_HEIGHT, bmp.getHeight());
if (bmp.getWidth() != startWidth || bmp.getHeight() != startHeight) {
    jsonObject.put(CHAT_MESSAGE_DATA_KEY_SCALE_TO_WIDTH, startWidth);
    jsonObject.put(CHAT_MESSAGE_DATA_KEY_SCALE_TO_HEIGHT, startHeight);
}

//for whiteboard let it know where to position
jsonObject.put(CHAT_MESSAGE_DATA_KEY_DOODLE_LEFT, (int) event.leftMostX);
jsonObject.put(CHAT_MESSAGE_DATA_KEY_DOODLE_TOP, (int) event.highestY);

jsonObject.put(CHAT_MESSAGE_DATA_KEY_DOODLE_AVAILABLE_WIDTH, viewWidth);
jsonObject.put(CHAT_MESSAGE_DATA_KEY_DOODLE_AVAILABLE_HEIGHT, viewHeight);

Attach the JSON data we created and send the chat message with a custom tag.

附加我们创建的JSON数据,并使用自定义标签发送聊天消息。

ChatMessageSend messageSend = new ChatMessageSend(chatId, WhiteboardUtils.CHAT_MESSAGE_TAG_WHITEBOARD);
//Attach our custom data to the chat message
messageSend.data(jsonObject);
BBMEnterprise.getInstance().getBbmdsProtocol().send(messageSend);

WhiteboardActivity.java

WhiteboardActivity.java

填充白板 (Populating the Whiteboard)

To populate the whiteboard with the doodle messages we iterate over the list of received chat messages in reverse creating a draw list. To avoid re-drawing chat messages we keep track of the last message drawn and only draw messages new messages. If we encounter a message with the tag CHAT_MESSAGE_TAG_CLEAR we can stop since earlier images would not be visible after the clear.

为了用涂鸦消息填充白板,我们在接收到的聊天消息列表上进行迭代,以反向方式创建绘制列表。 为了避免重画聊天消息,我们会跟踪最后绘制的消息,而只绘制新消息。 如果我们遇到带有标签CHAT_MESSAGE_TAG_CLEAR的消息,我们可以停止,因为清除后将看不到较早的图像。

//build list to display
ArrayList<ChatMessage> toDisplay = new ArrayList<>();
int size = chatMessageList.size();
boolean rememberLastDisplayed = true;
int pendingChatMessages = 0;
//start at last, go until find last displayed or control message
for (int i=size - 1; i >= 0; --i) {
    ObservableValue<ChatMessage> observableChatMessage = chatMessageList.get(i);
    ChatMessage chatMessage = observableChatMessage.get();
    observableChatMessage.addObserver(this);
    if (chatMessage.exists == Existence.MAYBE) {
        rememberLastDisplayed = false;
        ++pendingChatMessages;
        if (pendingChatMessages > 3) {
            //when the chat is first loaded all messages except the last one will be loading
            //if we continue we would process all previous messages, causing them to all load which
            //would display starting to draw recent messages, so stop after a reasonable amount to
            //give the most recent ones a chance to load so we can look for the last reset
            break;
        }
    } else {
        if (Equal.isEqual(chatMessage, mChatMessageListLastDisplayed)) {
            //we already displayed this one, stop
            break;
        } else {
            String tag = chatMessage.tag;
            if (WhiteboardUtils.CHAT_MESSAGE_TAG_WHITEBOARD.equals(tag) || WhiteboardUtils.CHAT_MESSAGE_TAG_PICTURE.equals(tag)) {
                toDisplay.add(chatMessage);
            } else if (WhiteboardUtils.CHAT_MESSAGE_TAG_CLEAR.equals(tag)) {
                toDisplay.add(chatMessage);
                //last one
                break;
            }
            //ignore others
        }
    }
}

WhiteboardView.java

WhiteboardView.java

Drawing the doodles or pictures requires us to recreate a bitmap from the base64 encoded data in the chat message. The size and position metadata included in the message are used to position the bitmap within the canvas.

绘制涂鸦或图片需要我们从聊天消息中的base64编码数据中重新创建位图。 消息中包含的大小和位置元数据用于将位图放置在画布中。

if (WhiteboardUtils.CHAT_MESSAGE_TAG_WHITEBOARD.equals(tag) || WhiteboardUtils.CHAT_MESSAGE_TAG_PICTURE.equals(tag)) {
    if (chatMessage.data == null) {
        Logger.w("missing data for ID="+chatMessage.messageId+" tag="+tag+" ");
        continue;
    }

    Bitmap bmp = WhiteboardUtils.createBitmap(chatMessage);

    if (bmp == null) {
        Logger.e("Failed to create bitmap from "+chatMessage);
        continue;
    }

    //figure out if need to scale it
    int remoteWidth = chatMessage.data.optInt(WhiteboardUtils.CHAT_MESSAGE_DATA_KEY_DOODLE_AVAILABLE_WIDTH, -1);
    int remoteHeight = chatMessage.data.optInt(WhiteboardUtils.CHAT_MESSAGE_DATA_KEY_DOODLE_AVAILABLE_HEIGHT, -1);

    Rect toRect;
    float scaleX = 1;
    float scaleY = 1;
    if (remoteWidth > 0 && remoteWidth != w) {
        //remote is different size
        scaleX = (float)w / (float)remoteWidth;
    }
    if (remoteHeight > 0 && remoteHeight != h) {
        //remote is different size
        scaleY = (float)h / (float)remoteHeight;
    }

    int left = chatMessage.data.optInt(WhiteboardUtils.CHAT_MESSAGE_DATA_KEY_DOODLE_LEFT, 0);
    int top = chatMessage.data.optInt(WhiteboardUtils.CHAT_MESSAGE_DATA_KEY_DOODLE_TOP, 0);

    int rectX = (int)(scaleX * left);
    int rectY = (int)(scaleY * top);
    toRect = new Rect(rectX, rectY, rectX + (int)(scaleX * bmp.getWidth()), rectY + (int)(scaleY * bmp.getHeight()));

    canvas.drawBitmap(bmp, null, toRect, null);
}

WhiteboardView.java

WhiteboardView.java

清除白板 (Clearing the whiteboard)

To clear the whiteboard of any existing doodles we send another chat message with the tag “ClearScreen”. When we encounter a clear tag we’ll wipe the canvas.

要清除白板上所有现有的涂鸦,我们会发送另一条带有“ ClearScreen”标签的聊天消息 。 当遇到透明标签时,我们将擦拭画布。

} else if (WhiteboardUtils.CHAT_MESSAGE_TAG_CLEAR.equals(tag)) {
    //clear canvas
    int color = Color.WHITE;
    if (chatMessage.data != null) {
        color = chatMessage.data.optInt(WhiteboardUtils.CHAT_MESSAGE_DATA_KEY_BACKGROUND_COLOR, color);
    }

    canvas.drawColor(color);
}

WhiteboardView.java

WhiteboardView.java

获取更多示例应用程序 (Get More Sample Applications)

Click here to access the sample applications for a chat bot, rich chat, whiteboard, location sharing, and more – to help you build your next-generation Android, iOS, or JavaScript app.

单击此处可访问聊天机器人,丰富聊天,白板,位置共享等的示例应用程序,以帮助您构建下一代Android,iOS或JavaScript应用程序。

让我们仔细看看BBM Enterprise SDK (Let’s Take a Closer Look into BBM Enterprise SDK)

BBM Enterprise SDK presents enterprises and developers with a framework to develop real-time, end-to-end secure messaging capabilities in their products or services, including Android, iOS, Node.js, and Web.

BBM Enterprise SDK为企业和开发人员提供了一个框架,以在其产品或服务(包括Android,iOS,Node.js和Web)中开发实时,端到端的安全消息传递功能。

With our communications platform, the possibilities are endless. With rich next-generation technologies, it powers your apps today—and in the future.

借助我们的通信平台,无限的可能性。 借助丰富的下一代技术,它可以为您现在和将来的应用程序提供支持。

针对开发人员的BBM安全消息传递平台

如何确保安全性? (How Does it Ensure Security?)

BBM Enterprise SDK’s security model ensures that data is protected both at-rest and in-transit, and encrypting instant messages, voice calls, and video calls. Only the sender and intended recipients can see each message sent, and ensures that messages aren’t modified in transit between the sender and recipient.

BBM Enterprise SDK的安全模型可确保静态和传输中的数据受到保护,并对即时消息,语音呼叫和视频呼叫进行加密。 只有发件人和预期的收件人可以看到发送的每封邮件,并确保在发件人和收件人之间的传输过程中不会修改邮件。

The BBM Enterprise SDK was designed to comply with the following three security principles:

BBM Enterprise SDK旨在遵循以下三个安全原则:

  • Messages are* digitally signed*, so you’re assured of who sends each message in your application.

    消息是经过*数字签名的 *,因此您可以确定谁发送了应用程序中的每条消息。

  • Messages are* encrypted*, so you’re assured that only the intended recipient can read the message.

    邮件经过*加密 *,因此可以确保只有目标收件人才能阅读邮件。

  • Messages are* subjected to integrity signature checks*, so you’re assured the message isn’t modified in transit.

    邮件*经过完整性签名检查 *,因此可以确保邮件在传输过程中不会被修改。

BBM Enterprise SDK uses a lot of security keys:

BBM Enterprise SDK使用许多安全密钥:

  • User’s Identity Keys

    用户的身份密钥

    • Public and private encryption keys for each user of BBM Enterprise SdK used to generate encryption keys for messages exchanged between two users outside of a chat (identity messages).

      BBM Enterprise SdK的每个用户的公用和专用加密密钥用于为聊天之外的两个用户之间交换的消息(身份消息)生成加密密钥。
    • Public and private signing keys for each user of BBM Enterprise SDK used to digitally sign chat messages when sent, and verifying the signature when received.

      BBM Enterprise SDK每个用户的公用和专用签名密钥,用于在发送聊天消息时对聊天消息进行数字签名,并在接收时验证签名。
  • Chat Keys

    聊天键

    • Symmetric encryption key for each chat, used to generate a per-message encryption key.

      每次聊天的对称加密密钥,用于生成每个消息的加密密钥。

But your application has complete control over your security keys to keep your sensitive data private. BlackBerry does not have access to your keys and your application will share and distribute keys only between your users.

但是您的应用程序可以完全控制安全密钥,以使敏感数据保持私密性。 BlackBerry无法访问您的密钥,您的应用程序将仅在用户之间共享和分发密钥。

BBM密钥管理

用户管理 (User Management)

With the BBM Enterprise SDK, your application will have complete control over discovering and managing users and relationships, as user accounts in the BBM Enterprise SDK represent users in the SDK only.

使用BBM Enterprise SDK,您的应用程序将完全控制发现和管理用户及关系,因为BBM Enterprise SDK中的用户帐户仅代表SDK中的用户。

Applications can also reuse existing user accounts and social networks by associating application accounts with BBM Enterprise SDK accounts

通过将应用程序帐户与BBM Enterprise SDK帐户关联,应用程序还可以重用现有的用户帐户和社交网络。

BBM用户数据库

立即将AI集成到您的应用中-免费 (Build AI into Your App Today — For Free)

Artificial intelligence will soon have a critical role to play in enterprise. Businesses that leverage it now will enjoy a considerable competitive advantage once it becomes more widespread. BlackBerry knows this – and we’re prepared to help your organization branch out into artificial intelligence, the enterprise of things, and whatever lies beyond.

人工智能将很快在企业中发挥关键作用。 一旦利用它,现在利用它的企业将享有相当大的竞争优势。 黑莓知道这一点,我们已经准备好帮助您的组织扩展到人工智能,物联网以及其他领域。

For more information about the BBM Enterprise SDK, click here, or download the free SDK to start building apps right away.

有关BBM Enterprise SDK的更多信息, 请单击此处 ,或下载免费的SDK以立即开始构建应用程序。

翻译自: https://www.sitepoint.com/ai-the-future-of-apps/

cookie启用安全传输

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值