‘壹’ 如何实现在不同app之间通讯
APP开发的第一个难点是数据通信,要把命令发送到控制器,由控制器发送命令来控制智能设备,这是一种方式。也有一部分没有通过控制器直接控制职能设备的,但是就两者而言他们的实现方式都大相径庭。数据通信需要定义报文协议,需要根据报文协议进行数据通信,需要注意位置的高低问题,注意要把字节对齐。然后商定通讯协议如果用TCP iOS里可以使用AsyncSocket第三方类库,如果用UDP可以 iOS可以使asyncudpsocket第三方类库。 APP开发智能家居蓝牙通信,目前一般使用蓝牙4.0BLE通信协议,蓝牙4.0把移动职能设备的发展推向高潮。目前在iPhone4s以上设备才能支持BLE,android在4.4之后才开始支持BLE。作为智能家居APP的开发者需要做到的是熟悉不同系统平台的封装API,然后专心业务逻辑处理。
‘贰’ WhatsApp是什么公司(whatsapp是什么公司开发)
有些客户几天没回复邮件,却可以秒回WhatsApp。
不知外贸人有没有发现,越来越多的海外客户倾向在WhatsApp上沟通,甚至有些客户几天没回复邮件,可是却可以秒回WhatsApp。
WhatsApp作为国外最盛行的通讯软件,在外国人心中的地位就像国内的微信一样无法撼动。据数据统计网站统计,目前WhatsApp的总用户数已经达到了20亿。
这款即时聊天软件的用户,遍及亚欧大陆、南美洲、非洲、东南亚等地区,占据世界版图的半壁江山,它也因此成为我们外贸人打通国际市场的必备软件之一。
话说当年还有一个小插曲——四年前,腾讯和WhatsApp谈收购的最后时刻,马化腾因为背部手术而延迟了飞往硅谷的行程,结果WhatsApp被Facebook的小扎“截胡”,为此导致做跨境的小伙伴在近年外贸中吃了不少苦旁清头。
今天特地为大家总结了这款外贸界最常用的沟通工具——WhatsApp的营销入门指南。
01、什么是WhatsApp?
WhatsApp的核心是通讯工具,侧重于“免费短信”应用,弱化社交,WhatsApp和手机通讯录深度整合。
用户无需注册即可使用,用户的帐号就是手机号码,不需要手动添加好友也不需要对方通过同意,安装后就可以马上给对方发信息,使用起来和传统的手机短信没有什么区别。
02、为什么要做WhatsApp营销?
在大多数行业中,提高客户参与度都是一件艰难的事情。然而在WhatsApp上,这件事变得简单很多。
因为在WhatsApp上,消息的打开率是98%。
也就是说,我们发出的几乎每一条消息,都会被收信人阅读。简单明了的信息互动,有助于在外贸业务员和客户之间建立交流桥梁,获得客户信任。
WhatsApp近年来开始逐渐丰富附加功能,巴西率先开通了WhatsApp支付功能,不仅支持扫野燃码指纹支付,还能够在聊天室直接向好友转账。
此外,WhatsApp还开放了广告投放业务,尽管这项业务目前还处于初始阶段,但鉴于WhatsApp在全球范围内的庞大用户数以及在新兴市场的增长态势,广告业务可能会成为WhatsApp乃至于Facebook新的强劲增长点。
03、如何注册及使用WhatsApp?
苹果手机用户,在Appstore内搜索“WhatsApp”;安卓手机用户,在各大应用市场内搜索“WhatsApp”,下载安装后,注册一个新的账号即可。
关于它的使用方法很简单,与微信别无二致。只是WhatsApp更依赖于通讯录联系人的同步,在WhatsApp注册过程中,如果提示手机获取通讯录联系人的信息,要记住,一定点击同意获取。
04、如何在WhatsApp上添运脊前加客户?
首先添加客户的手机号码到通讯录,为了避免以后有重名的客户,应该用地区或其他标志性备注区分开。
添加号码格式应为:国家区号号码
例如:我添加一个印度客户,他的号码是77XXXXXXX,印度区号是91,那么添加格式应为9177XXXXXXXX
然后登录WhatsApp,添加导入。
但要注意的是:
确保你输入的手机号是正确的;
如果这个是国际电话,注意不要使用前缀0。
05、如何获得客户的电话信息呢?
要搜索客户的手机号,外贸人使用较多的一般有以下几种渠道:
Facebook群组开发、广告投放等获得的客户信息
谷歌搜索客户信息、Skype客户信息栏
展会名片或者其他方式获得的客户名片
Email邮箱中客户提供联系方式
B2B平台的后台询盘信息等
6、WhatsApp有哪些实用功能和营销技巧?
①字体的设置
想要给字体加粗,在输入的内容前后加【*】,想让字体变斜体,在输入的内容前后加【_】,想给字体加删除线,则在输入的内容前后加【~】
这样的好处在于,当你和客户在WhatsApp上沟通,你需要highlight标注重要内容时,你可以选择这样的功能,引起客户的注意。
②避免照片被压缩
有些时候要给客户发一些图片,好多外贸人表示WhatsApp分享图片会被压缩,怎么解决呢?
只需要选择以Document方式发送照片,系统将不会自动压缩图片。
③群组功能
在添加客户的WhatsApp账号之后,该如何调动起来WhatsApp列表里的好友?
建群组!建群组!!建群组!!!
WhatsApp上面也有群组功能,小组好友的上限是256人。与Facebook小组不同的是,WhatsApp小组没有办法通过搜索进行添加,只能以成员邀请的方式,这在一定程度上保证了竞争对手不会挖走你的核心用户。
以下是创建成功的WhatsApp群组的基本技巧:
使用与公司行业相关的主题创建WhatsApp群组;
为群组进行独特的命名并上传合适的群组图片;
通过有用的内容、媒体文件等吸引客户;
保存群组二维码并在网络上进行推广;
邀请相关潜在客户加入该群组。
在WhatsApp小组里,可以和组员们分享精彩图片、视频、优惠信息等,这是建立品牌信任度和知名度的有效方法。
④客户维护
WhatsApp作为外贸企业营销链路上的重要触点,是企业传递品牌影响力和产品价值的关键一环,这个阶段海外客户往往通过与业务员的日常交流和获取内容,评估企业再采取下一个动作,所以外贸企业应该着力提升客户在WhatsApp端的体验,快速响应客户的痛点及需求,与客户建立情感链接。
首先,WhatsApp对于客户来说,是一个比较私密的社交圈,他们经常会在动态里面发布一些生活状态。这种情况下,可以对他们的动态进行评论,或以此为契机建立深度沟通,为单纯的生意关系添加一些更亲密的元素,会有利于增加客户对你的选择倾向。
另外,通过WhatsApp也可以发布自己的生活状态,或是身边一些节日庆典、公司趣事等,也有利于增加客户对我们的信任和了解。
其次,为了提高我们准确触达客户的效率,让客户对我们的信任释疑更快,我们应该借用工具实现WhatsApp的精细化运营,才有机会真正将潜客转化为订单。
比如,在沟通时,如果我们能预先知道客户的身份,或者提前判断客户是否了解过企业,是初次访客还是二次访客,我们就能采取不同的沟通策略。
这时,最好借助营销工具打通网站、WhatsApp、Messenger等多个沟通触点,以单个访客为维度,将TA的历史访问记录、历史沟通内容等以时间轴展现,便于客服或销售实时掌握充足的背景信息,避免出现对二次访客重复发问的情况。
‘叁’ iOS MFi外设配套App音频通讯实现小结
最近在做一款外设,搭配一款App,App中实现很多功能,集成了一套语音识别SDK,通过外设给App传输音频,通过SDK解析出具体的指令,去执行App中相关的功能。整体功能是这样,在iOS系统中,以上功能中有几个难点,很难解决或者是无法解决,只能避开。笼统的分以下几个点:
1).App在后台,外设能否拉起App
2).App被拉起之后,能否进行执行语音指令
3).App在后台,能否接收音频流,执行语音指令
上面这个问题是整个流程中最头疼的问题
1.首先要定义外设的形态,这里的外设可以是耳机,稍微变形一下可以是车载,录音笔,音响等。这里的外设就用耳机来代表。外设传输音频到App,无线场景下大部分都是采用蓝牙,蓝牙又分MFI认证的蓝牙设备和ble设备。
首先要说的是MFi认证握亩宏的蓝牙设备,这类设备使用iAP协议同iPhone, iPad and iPod进行数据交互,传输性能好,稳定,但是成本比较大,设备需要苹果的官方检测很麻烦。当时查了一些资料,MFi认证的设备似乎是能解决上面说的几个问题。如图1所示,MFi认证的设备跟App商定好协议之后就能通过语音拉起App,但是这里有个坑,那段话我找不到了,意思是如果是usb模式的外设是可以直接拉起App,但是如果非usb模式的,拉起之前会出一个弹框,看图1 我们都以为这个alert是可选的,段册其实并不是,在某些模式下,必须是带alert的,如果拉起App需要Alert,让用户去确认,那也就没必要通过语音唤醒了,直接点击App好了,所以这条路基本就不考虑了。
但是外设是可以拉起Siri的,这个是固件需要支持的。这又为App打开了一条路,外设可以通过Siri打开App,这条路可行。但是Siri Shortcuts是iOS12之后才支持的。考虑低版本暂时没有想到好的解决方案。
苹果针对iap设备有一个background mode, 如图2 中的External accessory communication。设置了这个mode之后,在用户不主动杀死App,或者是系统不因为内存占用太高而杀死App,App理论上会一直在后台“活着”的,针对这个“活着”又是另一个话题了,这里的活着是假活的,也就是只能接收到来自外设传输的信息,所有其他的网络请求啥的都会被系统停止,在我的另一篇文章 iOS 后台机制探索 中讲到了这个,所以在后台这个模式只是给我们提供了一个入口,而且在接收到外设信息之后,系统只有10几秒的时候给App进行处理,具体多少秒,我没有实测,我在接收到消息之后,重连App中的socket连接进行数据发送这些操作都是能正常完成的。
所以总结以下,在通过MFi认证,使用iap进行数据交互的设备在我们这边的产品来看,能拉起App,但是拉起会出一个alert弹框 让用户确认,所以无法做到无用户参与的耐判拉起App,如果想要通过外设去执行系统级别的操作,可以让外设接入Siri,可以通过Siri去打电话,接电话,查询天气等,同时在iOS12的系统上可以通过Siri打开应用。自家的App在设置了External accessory communication的background mode之后,能一定程度上保证App不被杀死,但是异常情况不可控,如果是iOS12 以上的系统可以通过Siri打开,但是iOS12以下的系统还是需要手动点击,先把App拉活了之后 再通过语音进行指令控制。但是就算设置了background mode之后,App也只能接收到来自iap的数据,无法完全保证所有的socket连接都不断,在每次接收到来自外设的数据时,还是需要本地做重连机制。
通过iap进行数据交互无论是产品定义还是功能实现都比较简单,因为苹果提供了很完整的文档,能实现啥不能实现啥都清清楚楚的展示出来了,而且iap数据传输带宽高,稳定性强,官方提供的demo直接就能用,需要App开发者要配置的东西很少,大部分的难点都在固件端,所以开发起来除了有后台的问题不好解决,其他都很愉快,但是如果是用ble进行音频传输就会有很多坑,下面一篇文章就是要说的不用iap进行这块的数据传输,改用ble的实现流程。
‘肆’ 【思考】APP之间的通讯有哪几种方式呢
- (BOOL)openURL:(NSURL*)url NS_DEPRECATED_IOS(2_0, 10_0, "Please use openURL:options:completionHandler: instead") NS_EXTENSION_UNAVAILABLE_IOS("");
- (void)openURL:(NSURL*)url options:(NSDictionary<NSString *, id> *)options completionHandler:(void (^ __nullable)(BOOL success))completion NS_AVAILABLE_IOS(10_0) NS_EXTENSION_UNAVAILABLE_IOS("");
这两个方法可以说是在iOS开发中最为常见也比较强大的两个方法,可以打开其他的app,进行外部浏览器的各种操作,打电话,发邮件等等操作都是可以,也是咱们最为常见的一种方式。
通过‘淘口令 令’我们可以使用特定的连接来实现
‘淘口令 ’实现
简单的来说就是使用 系统的UIPasteboard可以检测到系统剪切板是上的内容,然后通过正则匹配剪切板上的连接,进而在app内部打开使用。
具体的场景就是咱们常用的app验证登录,某些app可以使用微信或者支付宝登录,具体的使用就是使用了 Keychain 校验
感谢作者
文章我就不了,需要的同学直接点击链接 文章
这个在 【4】的文章中也有体现,需要的同学直接请直接查看。
首先通过调用它唯一的类方法 interactionControllerWithURL:,并传入一个URL(NSURL),为你想要共享的文件来初始化一个实例对象。然后,然后显示菜单和预览窗口。
‘伍’ APP内即时通讯问题
即时通讯(Instant Messenger,简称IM)软件多是基于TCP/IP和UDP进行通讯的,TCP/IP和UDP都是建立在更低层的IP协议上的两种通讯传输协议。前 者是以数据流的形式,将传输数据经分割、打包后,通过两台机器之间建立起的虚电路,进行连续告备的、双向的、严格保证数据正确性的文件传输协议。而后者是以数 据报的形式,对拆分后的数据的先后到达顺序不做要求的文件传输嫌碧协议。 QQ就是使用UDP协议进行发送和接收消息的。当你的机器安装了OICQ以后,实际上,你既是服务芹友举端(Server),又是客户端(Client)。当你登录OICQ时,你的OICQ作为Client连接到腾讯公司的主服务器上,当你看谁在线时,你的OICQ又一次作为Client从QQ Server上读取在线中国友名单。当你和你的OICQ伙伴进行聊天时,如果你和对方的连接比较稳定,你和他的聊天内容都是以UDP的形式,在计算机之间传 送。如果你和对方的连接不是很稳定,QQ服务器将为你们的聊天内容进行中转。其他的即时通信软件原理与此大同小异
‘陆’ 如何实现wifi模块与手机app的实时通讯
串口WiFi模块智能控制的方式如下:
WiFi模块工作STA模式,智能终端(手机、平板)和WiFi模块工作在无线路由器提供的无线网络环境中,数据信号经过无线路由器转发,从而实现无线控制。
WiFi模块工作在AP模式,智能终端(手机、平板)直接接入WiFi模块提供的网络,在同一个热点网络实现无线控制。
远程控制,智能终端(手机、平板)和无线路由器处于不同的网络中,WiFi模块负责将相关数据上传到服务器,这时候,智能终端和串口WiFi模块电子设备的通讯都是经过服务器转发,实现远程控制。
最推荐就是esp8266方案的UART WiFi模块,像WG219,里面集成at指令的协议栈,基本能满足物联网应用中wifi模块与手机app的实时通讯。
‘柒’ 网贷逾期,如何做才能保证通讯录不被骚扰
马上就要回家过春节了,没有足够多的钱还 贷款 ,一旦逾期,借款的朋友们不仅自己要整日面对无休止的 催收 电话,身边的人也会被各种骚扰。父母年纪也很大了,不能让他们着急生气;朋友同事们要是知道了,脸都丢光了,这还怎么安心过年? 那有什么办法可以保证通讯录不被骚扰呢?
首先,我们要知道 网贷 平台是如何得到你的通讯录的:
一、同意访问通讯录
通常下载了某款app,第一次打开的时候会弹出访问通讯录饥昌权限的申请,有些朋友看都不看就直接同意了,却没有意识到已经把自己的隐私暴露了。
二、通过非法途径
网上非法买卖个人信息的很多,有的是公司用户信息泄露。毕竟互联网时代,外包的催款公司有自己的“路子”,通过一些非法途径得到了借款人的通讯录。这种情况下,就只能提醒大家平时多留意,保护好自己通讯录,不要轻易地泄露。
找到了问题的源头,我们再来说说解决被爆通讯录的方法:
1、 阻止通讯录被访问
对于稀里糊涂就同意了平台访问通讯录的朋友,可以提前在手机里下载相关的拦截软件,阻止他们获取你的通讯录和通话记录。不过这样的话,就很有可能会导致你的贷款申请被拒。
2、 保持电话畅通,协商还钱
逾期本身是自己的问题,不要逃避,积极面对。和对方的催收人员进行协商,表明自己的诚意,制定一个可行性比较高的还款计划。平台的目的也不过是为了收回欠款,所以在借款人有强烈还款意愿的情况下,爆通讯录的可能性会降低不少。
3、向家人朋友坦白
与其坐等被催收爆通讯录,倒不如自己抢先与家人、朋友坦白。告诉他们自己为什么借贷、现在面临的困境,一般都会被理解。即使被爆通讯录,我们的面子还是可以保住的。
如果家里经济实力还可以的,可以先跟家人 借钱 还贷,日后好好工作再慢慢还给液扮家人。钱还了,还省了利息,面子也保住了。
4、 网贷投诉
可以向中国互联网金融举报信息平台(网址https://jubao.nifa.org.cn/ipnifa/index.html)进行举报。这个平台举报范围为互联网金融从业机构的违法、违规行为。
5、 求助法律
保留暴力催收的短信以及通话录音,通过法律维权。贷款新规:对于那些恶意催收,或者是委托第三方催收的,都闹肢灶不可以通过暴力、恐吓、侮辱、诽谤、骚扰的方式催收,如果严重违法违规的可以及时将其移送到公安局。
另外,康博士还要提醒大家:
1.在申请贷款时选择正规的平台,正规平台给的容时期多,催收也比较文明。
2.从自身做起,借款时查看负债情况,避免资金崩盘,逾期还不起的情况发生。
3.在和催收沟通过程中,以理服人,讲出自己是会还的,给出还款日期。催收达到让借款人还款的目的,也不会浪费时间盯着你的。
如今已是2019年,如果你正在陷入网贷的泥潭,并且遇到了非法催收,一定不要害怕,懂得用法律武器保护自己的合法权益!
‘捌’ android 如何让两个apk相互通信
A.apk,B.apk都是我写的.现在我想在B.apk里实现获得A.apk的某控件ID,并向其发送一个按键事件.如何实现,谢谢!也就是用B控制A.
这两个apk 是在两个进程里的,(或许可以配置成一个进程。不过如何直接操作这个没有试过。)
所以一般的有两种方法:
1、RPC
2、通过 BroadcastRecever 或 Service
第二种方法比较简单一些。
比如B 控制 A的话,
A定义Service ,比如com.my.ServerA .自定义actionFilter “com.my.serverA.action"
B中调用Intent it = newIntent("com.my.serverA.action");
it.putExtra(....);// 传递你的自定义控制指令。
B.startService(it);
在A中ServerA的 onStartService(Intent it) 。解析这个控制指令,做相应操作就可以了。
用BroadcastRecever 的道理一样。
Aidl,android平台的IPC方式之一,基于系统的Ibinder机制。
网上大多数例子都是在一个apk下来测试调用service,现在我在两个project下面来调用。
一个是server project,一个是client project
首先我们建立的是server project,这里面要实现aidl文件和一个service,activity只是用来启动service的,当然,你也可以通过发广播的形式来启动service。
首先看IAidlService.aidl文件:
java代码
package com.ds.server;
interface IAidlService {
int getType();
}
这样在eclipse里面自动编译的时候会在gen下面生成IAidlService.java文件(灯下我们的client project要用)。
然后新建一个service,这个service里面has a IAidlService的stub对象,service具体代码如下:
Java代码
package com.ds.server;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
public class AidlService extends Service {
private IAidlService.Stub mBinder = new IAidlService.Stub() {
@Override
public int getType() throws RemoteException {
// TODO Auto-generated method stub
return 5;
}
};
private void Log(String str) {
Log.d("AidlService", "------ " + str + "------");
}
@Override
public void onCreate() {
Log("service create");
}
@Override
public void onStart(Intent intent, int startId) {
Log("service start id=" + startId);
}
@Override
public IBinder onBind(Intent t) {
Log("service on bind");
return mBinder;
}
@Override
public void onDestroy() {
Log("service on destroy");
super.onDestroy();
}
@Override
public boolean onUnbind(Intent intent) {
Log("service on unbind");
return super.onUnbind(intent);
}
public void onRebind(Intent intent) {
Log("service on rebind");
super.onRebind(intent);
}
}
这里一定要实现onBind方法,并返回一个IAidlService.Stub对象。
再去AndroidManifest.xml注册这个service:
Xml代码
<service
android:name=".AidlService"
android:enabled="true"
android:process=":remote" >
<intent-filter>
<action android:name="com.ds.server.IAidlService" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</service>
android:enabled="true"
android:process=":remote"这两个标签可有可无。
只要注册了这个service就行。
好了,到此,服务端已经完成。
-------------------华丽的分割线-----------------------------------------
下面我们开始client project。
client project比较简单,需要注意的地方是,首先需要把server project中gen文件夹中aidl生成的那个IAidlService.java类以及包都拷贝到我们的client project中。
(注意:client project的包名为com.ds.client;另外一个包名com.ds.server以及这个server包下面的IAidlService.java类都是从server project的gen文件夹拷贝过来的,至于gen文件夹的其他文件就不需要拷贝过来。)。
好了,这样的话,client project只要从activity去远程调用service就好了,实现代码如下:
Java代码
package com.ds.client;
import com.ds.server.IAidlService;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class AidlClientActivity extends Activity {
IAidlService iservice;
private ServiceConnection connection = new ServiceConnection() {
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
// 从远程service中获得AIDL实例化对象
iservice = IAidlService.Stub.asInterface(service);
Log.i("Client","Bind Success:" + iservice);
}
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
iservice = null;
Log.i("Client","onServiceDisconnected");
}
};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final TextView tv = (TextView) findViewById(R.id.tv);
Button bt = (Button) findViewById(R.id.bt);
bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent service = new Intent(IAidlService.class.getName());
bindService(service, connection, BIND_AUTO_CREATE);
if (iservice != null) {
try {
tv.setText("" + iservice.getType());
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
});
}
}
注意几点:
1,import com.ds.server.IAidlService;使用的是我们拷贝过来的IAidlService.java类
2,需要一个ServiceConnection对象
3,通过Intent service = new Intent(IAidlService.class.getName());
bindService(service, connection, BIND_AUTO_CREATE);来bind service。这样就可以调用aidl中定义的接口来获取service中的值了。
唉,由于在使用中没有注意拷贝server project中gen文件夹下面的包和IAidlService.java,老是出现Unable to start service Intent这样的错误。搞了好久。
附件是源码。注意使用的时候,先要运行server project,启动服务,然后再运行client project。
‘玖’ 手机app开发怎样与服务器通信
app开发分客户端和服务端开发猛戚做,客户端和服务端以json格式http协议通信仔弊,服务端是操作服务器的,各种逻辑,数据处理等都是服务端的事,然后服务端再与客户端通信枝衡的。
‘拾’ 新上线的APP如何保障其安全,不被遭到破解、反编译、山寨等等
可以考虑使用第三方安全服务商提供的加密服务,比如有爱加密等等,其提供了DEX加壳保护、防二次打包保护、内存防mp保护、高级防调试器保护、漏洞分析服务、渠道服务、DLL\LUA资源文件保护、防日志泄露、高级资源文件保护、本地数据文件保护、通讯协议加固、SO文件保护等等众多加密服务,为APP的安全保驾护航。