2017-03-26 22:52:50 rockykou 阅读数 1591

1.消息推送

极光推送

旧版文档 http://docs.jpush.cn/display/dev/Index
新版 http://docs.jpush.io/
Android文档 http://docs.jpush.io/guideline/android_guide/
免费

百度推送

Android文档 http://push.baidu.com/doc/android/api

个推

Android文档 http://docs.getui.com/

腾讯推送

Android文档 http://developer.qq.com/wiki/xg/信鸽基础介绍/信鸽基础介绍.html
免费

小米推送

Android文档 http://dev.xiaomi.com/doc/p=6421/index.html

友盟推送

文档 http://www.umeng.com/push
Android文档 http://dev.umeng.com/push/android/integration


2.数据统计

友盟统计

所有文档 http://dev.umeng.com/
统计分析 http://dev.umeng.com/analytics/android-doc/integration

百度统计

sdk下载 http://mtj.baidu.com/web/sdk/index
注:开发集成文档在sdk文件中

TalkingData

Android文档 https://www.talkingdata.com/app/document_web/index.jsp?statistics


3.Crash崩溃统计分析

百度crab平台

Android文档 http://crab.baidu.com/wiki.html

Bugly

Android文档 http://bugly.qq.com/getStarted

BugHD

Android文档 http://bughd.com/doc/index


4.应用加固

360加固保

http://jiagu.360.cn/

爱加密加固

http://www.ijiami.cn/

阿里聚安全

http://jaq.alibaba.com/

百度加固

http://app.baidu.com/docs/?id=27

腾讯云加固

http://legu.qcloud.com/

梆梆加固

http://www.bangcle.com/

Dexguard


5.分享三方平台

友盟分享

Android文档 http://www.umeng.com/social

ShareSDK

Android文档 http://wiki.mob.com/


6.自动化测试

Testin等等


7.即时通讯

融云

各个平台 http://www.rongcloud.cn/downloads

网易云信

各个平台 http://netease.im/?page=download

环信

各个平台 http://docs.easemob.com/docs.php

极光IM

各个平台 https://www.jpush.cn/common/im/

友盟IM

各个平台 http://dev.umeng.com/openim/android/integration

VTC微特喜

各个平台 http://www.vtc365.com:8080/LiveVideoServer/


8.移动支付

BeeCloud

Android文档 https://beecloud.cn/doc/?index=2

Ping++

Android文档 https://www.pingxx.com/guidance/client/sdk/android


9.第三方登录

友盟

文档 http://dev.umeng.com/social/android/android-update 博客 http://blog.umeng.com/uncategorized/4160.html

ShareSDK

Android文档 http://wiki.mob.com/


10.地图服务

百度地图

地图SDK http://lbsyun.baidu.com/index.php?title=androidsdk

高德地图

地图SDK http://lbs.amap.com/api/android-sdk/summary/


11.直播

网易云信

直播SDK http://dev.netease.im/

趣拍微视频云服务

直播SDK http://lbs.amap.com/api/android-sdk/summary/

阿里云直播

https://help.aliyun.com/document_detail/45270.html?spm=5176.doc48207.6.602.btm1WX

金山云直播

https://docs.ksyun.com/read/latest/112/_book/index.html

七牛云

直播SDK https://developer.qiniu.com/sdk

乐视云

直播SDk http://www.lecloud.com/zh-cn/help/sdk.html

VTC云通信

直播SDK http://www.vtc365.com:8080/LiveVideoServer/sdk.jsp

Ucloud

官网:https://www.ucloud.cn/

gensee

直播SDK http://www.gensee.com/document.html


12.应用市场

应用宝

360助手

百度助手

2017-06-09 20:41:01 sinat_31057219 阅读数 3587

参考:

基于环信即时通信云V2 SDK开发的聊天demo
Android基于环信SDK开发IM即时聊天(一)
android-使用环信SDK开发即时通信功能及源码下载

IM :

即时通信系统(IM,Instant Messenger)。

Android第三方即时聊天SDK的有:网易云信、环信和融云等。

参考:3款IM云服务产品对比 即时通讯云产品横向评测

这里以环信来做即时通讯demo达到两个效果:
1、用户登录,
2、用户间即时通讯

参考:Android开发课程之环信-即时通讯框架

环信的功能类似服务器。A和B用户的交互都要经过环信这个服务器。

环信框架集成

环信即时通讯云V2.0

环信即时通讯云V3.0

1、下载环信sdk开发包

环信sdk下载

这里写图片描述

下载后sdk目录如下:

这里写图片描述

2、注册成为环信开发者

开发者注册

这里写图片描述

3、在环信平台上创建应用程序,获取AppKey

这里写图片描述

4、在环信平台上注册用户

这里写图片描述

5、创建Android studio项目,导入SDK开发包中的库文件

5.1  将sdk包lib中的jar文件放到as项目中的libs中,并add library(可看源码即可)
5.2  as项目src/main中new 一个directory,命名为jniLibs,然后将sdk包lib中的其他三个文件夹放到jniLibs中。

这里写图片描述

6、添加权限
7、配置AppKey
8、声明SDK所需的Service和BroadcastReceiver

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.administrator.myapplication">

    <!-- Required -->
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

    <application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".ChatActivity"></activity>

        <!-- 设置环信应用的AppKey -->
        <meta-data
            android:name="EASEMOB_APPKEY"
            android:value="1173170609178552#chatdemo" />

        <!-- 声明SDK所需的service SDK核心功能-->
        <service
            android:name="com.hyphenate.chat.EMChatService"
            android:exported="true" />

        <service
            android:name="com.hyphenate.chat.EMJobService"
            android:exported="true"
            android:permission="android.permission.BIND_JOB_SERVICE" />

        <!-- 声明SDK所需的receiver -->
        <receiver android:name="com.hyphenate.chat.EMMonitorReceiver">
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_REMOVED" />
                <data android:scheme="package" />
            </intent-filter>
            <!-- 可选filter -->
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.intent.action.USER_PRESENT" />
            </intent-filter>
        </receiver>

    </application>

</manifest>

9、SDK初始化

package com.example.administrator.myapplication;

import android.app.Application;

import com.hyphenate.chat.EMClient;
import com.hyphenate.chat.EMOptions;

/**
 * Created by Administrator on 2017/6/9.
 */

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        //配置环信sdk
        EMOptions emOptions = new EMOptions();
        emOptions.setAutoLogin(false);

        //初始化环信sdk
        EMClient.getInstance().init(this, emOptions);
    }
}

10、登录

界面:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    tools:context="com.example.administrator.myapplication.MainActivity">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher" />

    <EditText
        android:id="@+id/et_name_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:gravity="center"
        android:hint="请输入用户名" />

    <EditText
        android:id="@+id/et_pw_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:gravity="center"
        android:hint="请输入密码"
        android:inputType="textPassword" />


    <Button
        android:id="@+id/btn_login_login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:paddingLeft="40dp"
        android:paddingRight="40dp"
        android:text="登录" />
</LinearLayout>

代码:

package com.example.administrator.myapplication;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.hyphenate.EMCallBack;
import com.hyphenate.chat.EMClient;

import butterknife.BindView;
import butterknife.ButterKnife;

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.et_name_login)
    EditText etNameLogin;
    @BindView(R.id.et_pw_login)
    EditText etPwLogin;
    @BindView(R.id.btn_login_login)
    Button btnLoginLogin;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);

        btnLoginLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //执行登录功能
                EMClient.getInstance().login(etNameLogin.getText().toString(),//登录名称
                        etPwLogin.getText().toString(),//登录密码
                        new EMCallBack() {//子线程执行,不能更新UI
                            @Override
                            public void onSuccess() {
                                //登录成功
                                startActivity(new Intent(MainActivity.this, ChatActivity.class));
                                finish();
                            }

                            @Override
                            public void onError(int i, String s) {
                                //登录失败

                            }

                            @Override
                            public void onProgress(int i, String s) {
                                //进度更新

                            }
                        });


            }
        });


    }
}












11、发送消息,监听消息的获取

布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/tv"
        android:text="0000"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/et_name_chat"
        android:background="@color/colorAccent" />

    <Button
        android:id="@+id/btn_send"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:text="发送" />

    <EditText
        android:id="@+id/et_name_chat"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/et_content_chat"
        android:layout_toLeftOf="@+id/btn_send"
        android:hint="请输入要发送的人" />

    <EditText
        android:id="@+id/et_content_chat"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/btn_send"
        android:layout_toLeftOf="@+id/btn_send"
        android:hint="请输入要发送的内容" />


</RelativeLayout>

代码:

package com.example.administrator.myapplication;

import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.hyphenate.EMMessageListener;
import com.hyphenate.chat.EMClient;
import com.hyphenate.chat.EMMessage;
import com.hyphenate.chat.EMTextMessageBody;

import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;

/**
 * Created by Administrator on 2017/6/9.
 */

public class ChatActivity extends AppCompatActivity {

    @BindView(R.id.tv)
    TextView tv;
    @BindView(R.id.btn_send)
    Button btnSend;
    @BindView(R.id.et_content_chat)
    EditText etContentChat;
    @BindView(R.id.et_name_chat)
    EditText etNameChat;
    private MyEMMessageListener ml;

    private Handler handler = new Handler();


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_chat);
        ButterKnife.bind(this);

        //发送消息
        btnSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //创建消息对象:参数:消息内容,接收人>>>此处注意顺序,容易出错导致接收不到信息 
                EMMessage txtSendMessage = EMMessage.createTxtSendMessage(etContentChat.getText().toString(),
                        etNameChat.getText().toString());
                //发送消息
                EMClient.getInstance().chatManager().sendMessage(txtSendMessage);
            }
        });

        ml = new MyEMMessageListener();
        EMClient.getInstance().chatManager().addMessageListener(ml);
    }

    /*
    * 消息监听
    */
    class MyEMMessageListener implements EMMessageListener {

        @Override
        public void onMessageReceived(List<EMMessage> list) {//此方法子线程中执行

            //解析消息
            for (EMMessage node : list) {
                final String from = node.getFrom();//发送者
                final EMMessage.Type type = node.getType();//消息类型

                switch (type) {
                    case TXT://文本内容
                        EMTextMessageBody body = (EMTextMessageBody) node.getBody();
                        final String message = body.getMessage();

                        //将修改内容交给主线程来更新UI
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                tv.append(from + "对我说:" + message);
                            }
                        });

                        break;
                    default:
                        break;
                }
            }
        }

        @Override
        public void onCmdMessageReceived(List<EMMessage> list) {

        }

        @Override
        public void onMessageRead(List<EMMessage> list) {

        }

        @Override
        public void onMessageDelivered(List<EMMessage> list) {

        }

        @Override
        public void onMessageChanged(EMMessage emMessage, Object o) {

        }
    }

    //取消监听避免内存泄漏
    @Override
    protected void onDestroy() {
        super.onDestroy();

        EMClient.getInstance().chatManager().removeMessageListener(ml);
    }
}
2012-12-18 11:03:07 silvia0427 阅读数 324
情景:现状有第三方应用需要接入到我们的应用中,第三方提供他们程序的apk,在我们自己的应用中第一次打开系统安装应用程序安装第三方应用,以后每次就直接跳转到第三方应用中。

首先:将第三方应用apk放到自己应用的assets目录下;
其次:代码如下:

package com.bonc.install;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;


import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class InstallNaturalSalerActivity extends Activity {

private static int REQUEST_INSTALL = 0;
private static int REQUEST_QD = 1;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);


Button btn = (Button)this.findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
// TODO Auto-generated method stub
boncNaturalSaler();
}
});

}
/**
* 安装apk
*/
private void installApk(){
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(Intent.ACTION_VIEW);
String type = "application/vnd.android.package-archive";
try {
InputStream is = getClass().getResourceAsStream(
"/assets/NaturalSalerThird.apk");
FileOutputStream fos = InstallNaturalSalerActivity.this.openFileOutput(
"NaturalSalerThird.apk", Context.MODE_PRIVATE
+ Context.MODE_WORLD_READABLE);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = is.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
fos.flush();
is.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
File f = new File(InstallNaturalSalerActivity.this.getFilesDir().getPath()
+ "/NaturalSalerThird.apk");
intent.setDataAndType(Uri.fromFile(f), type);
InstallNaturalSalerActivity.this.startActivityForResult(intent, REQUEST_INSTALL);

}
/**
* 自然人销售
*/

private void boncNaturalSaler(){
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.bonc.nature.activity",
"com.bonc.nature.activity.LogoActivity"));
Bundle bundle = new Bundle();
bundle.putString("cell","15800000000"); //手机号
bundle.putString("password","111111"); //密码
bundle.putString("token",""); //token

intent.putExtras(bundle);


try{
startActivityForResult(intent, REQUEST_QD);
}catch(ActivityNotFoundException anfe){
System.out.println("anfe = " + anfe.toString());
installApk();
}catch(Exception e){
System.out.println("exception : " + e.toString());
}
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == REQUEST_QD){

}
}


}

2015-08-19 15:03:00 weixin_34159110 阅读数 25

1.阿里百川

单聊、群聊、客服能力集成,仅需花费4小时,不收费,0成本接入,让App轻松拥有沟通能力,历经多次双十一考验,消息到达率100%,全年可用性高达99.99%,登录异常提醒,木马钓鱼网站监测。图文内容泛滥检测等 反垃圾欺诈检测,支持定制化安全方案

地址:http://baichuan.taobao.com/portal/index.htm

2.容联云通讯

其产品包含了很多,其中用了其短信验证码,因为其免费。

地址:http://www.yuntongxun.com/

3.环信

用到了工作当中的一个项目,免费版本,获取历史聊天记录,同步双方聊天记录操作等等,熟用了服务器api,可以很好了支持了我们的需求,而且个性化定制也好,当然也只用了这个,不过客服人员真的是非常nice。

地址:http://www.easemob.com/

4. TeamTalk

TeamTalk 是由蘑菇街开发的开源即时通讯解决方案,适用于中小型企业,提供可靠的消息传递机制;支持文字、图片、语音等富文本信息;文件收发等。

发布地址:https://github.com/mogujie/TeamTalk

地址:http://tt.mogu.io/

 

 

----------持续更新

 

没有更多推荐了,返回首页