android 友盟第三方登录授权陆 怎么清除授权信息

获取友盟Appkey如果你之前已经在友盟注册了应用,并获取到了Appkey,可以继续使用它.如果你尚未在友盟注册开发者账号,需要先注册,注册之后登录你的账号,点击添加新应用,填写完应用基本信息后,将进入"下载SDK并添加代码"页面,此页面即可得到Appkey。下载并安装SDK* 下载[SDK最新版](/social/android/sdk-download)* 添加代码和资源引用,我们提供了两种方式,可以根据需求选择&&& &A.解压SDK压缩包,将文件夹中的social_sdk_library_project文件夹导入Eclipse,并在您的工程中添加对此项目的引用即可。&& &&& &B.解压SDK压缩包,将文件夹中的'main/libs'和'main/res'文件夹复制到你的项目工程根目录下(如使用'ADT 17'以下用户需要手动添加'libs'下的jar文件到工程Path中),同时将需要添加的对应平台(platform文件夹下)的jar包和res文件放到你的工程目录下* AndroidManifest配置
//增加一个activity
android:name="com.umeng.socialize.editorpage.ShareActivity"
android:theme="@style/Theme.UMDefault"
android:excludeFromRecents="true"/&
// 设置友盟appid
&meta-data
android:name="UMENG_APPKEY"
android:value="4eaee02c0003" &
&/meta-data&
1 &uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&
&uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /&
&uses-permission android:name="android.permission.READ_PHONE_STATE" /&
&uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&
&uses-permission android:name="android.permission.INTERNET" /&
&uses-permission android:name="android.permission.READ_LOGS" /&
&uses-permission android:name="android.permission.CALL_PHONE" /&
&uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&
&uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /&
&uses-permission android:name="android.permission.GET_TASKS" /&
&uses-permission android:name="android.permission.SET_DEBUG_APP" /&
&uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /&
&uses-permission android:name="android.permission.GET_ACCOUNTS" /&
&uses-permission android:name="android.permission.USE_CREDENTIALS" /&
&uses-permission android:name="android.permission.MANAGE_ACCOUNTS" /&
针对不平台所需要添加的数据
3 &activity
android:name="com.umeng.example.wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" /& 9
12 &activity
android:name="com.renn.rennsdk.oauth.OAuthActivity"
android:configChanges="orientation|navigation|keyboardHidden" /&15
18&activity
android:name="com.tencent.tauth.AuthActivity"
android:launchMode="singleTask"
android:noHistory="true" &
22 &intent-filter&
23 &action android:name="android.intent.action.VIEW" /&
&category android:name="android.intent.category.DEFAULT" /&
25 &category android:name="android.intent.category.BROWSABLE" /&
26 &data android:scheme="tencent" /&
&/intent-filter&
&/activity&
android:name="com.mon.AssistActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" /&32
33 谷歌地图
35 &uses-library
android:name="com.google.android.maps"
android:required="false" /&
&uses-library android:name="android.test.runner" /&39 facebook
40 &activity
android:name="com.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar" /&
android:name="com.facebook.FacebookContentProvider"
android:authorities="com.facebook.app.FacebookContentProvider+appid"
46 android:exported="true" /&
&meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" /&50
51 新浪微博
android:name=".WBShareActivity"
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait" &
&intent-filter&
&action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" /&
&category android:name="android.intent.category.DEFAULT" /&
&/intent-filter&
&/activity&
62 &activity
android:name="com.sina.ponent.WeiboSdkBrowser"
android:configChanges="keyboardHidden|orientation"
android:windowSoftInputMode="adjustResize"
android:exported="false" &
&/activity&68
69 &service android:name="com.sina.weibo.sdk.net.DownloadService"
android:exported="false"&&/service&71
74&activity
android:name=".apshare.ShareEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" /&
4.& 打开平台选择面板4.1& 各个平台的配置,建议放在全局Application或者程序入口
1 PlatformConfig.setWeixin("wx967daebe835fbeac", "5bb696d9ccd75a38c8a0bfe"); //微信 appid appsecret
2 PlatformConfig.setSinaWeibo("","04b48b094faeb24ebdad");//新浪微博 appkey appsecret
4 PlatformConfig.setYixin("yxc4c11bf13bf");//易信 appkey
6 PlatformConfig.setRenren("201874","f04a72a14c812d6132fcef","3bf66e42db1e4fa0b737");//人人 appid appkey appsecret
7 PlatformConfig.setQQZone("", "caab60104f0ba"); // qq qzone appid appkey
8 PlatformConfig.setAlipay("2536");//alipay appid
说明:需要使用第三方公司api的平台,新浪,腾讯等,是需要去申请appkey的。人人豆瓣只能在服务器端设置。其它需要配置appid的平台,如qq,微信,易信,twitter等都需要在本地设置。还有一部分平台需要在mainfest中配置,前面已经提到过。授权目前友盟社会化组件支持的第三方登录平台为:新浪微博、QQ、微信、人人网、豆瓣。(特别说明:QQ空间,qq微博使用qq授权)首先获取UMShareAPI
private UMShareAPI mShareAPI;
2 mShareAPI = UMShareAPI.get( this );
选取需要授权的平台,并进行授权,其中umAuthLisrener是回调监听器,需要开发者根据需求重新定义
1 SHARE_MEDIA platform = SHARE_MEDIA.SINA;
mShareAPI.doOauthVerify(this, platform, umAuthListener)
private UMAuthListener umAuthListener = new UMAuthListener() {
public void onComplete(SHARE_MEDIA platform, int action, Map&String, String& data) {
Toast.makeText( getApplicationContext(), "Authorize succeed", Toast.LENGTH_SHORT).show();
public void onError(SHARE_MEDIA platform, int action, Throwable t) {
Toast.makeText( getApplicationContext(), "Authorize fail", Toast.LENGTH_SHORT).show();
public void onCancel(SHARE_MEDIA platform, int action) {
Toast.makeText( getApplicationContext(), "Authorize cancel", Toast.LENGTH_SHORT).show();
对于删除授权使用的接口是
mShareAPI.deleteOauth(AuthActivity.this, platform, umdelAuthListener);
注意要重写
1 onActivityResult()
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mShareAPI.onActivityResult(requestCode, resultCode, data);
平台授权,是需要安装对应的客户端的。新浪微博,豆瓣网,人人网除外,这三个平台如果本地安装了对应平台是走本地授权,如果没有安装,需要走网络授权
自定义shareboard:
1 final SHARE_MEDIA[] displaylist = new SHARE_MEDIA[]
SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE,SHARE_MEDIA.SINA,
SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE,SHARE_MEDIA.DOUBAN
new ShareAction(this).setDisplayList( displaylist )
.withText( "呵呵" )
.withMedia( image )
.setShareboardclickCallback(shareBoardlistener)
11 自定义shareboard需要,指明需要显示的平台,放入shareaction中,并执行open方法即可。
12 shareboard点击响应回调方法如下:
private ShareBoardlistener shareBoardlistener = new ShareBoardlistener() {
public void onclick(SHARE_MEDIA share_media) {
单平台直接分享:
1 new ShareAction(this)
.setPlatform(SHARE_MEDIA.DOUBAN)
.setCallback(umShareListener)
.withText("Hello 豆瓣")
.withMedia(image)
7 选取分享的平台,设定分享回调接口和内容,并执行share方法。
回调接口如下:
new UMShareListener() {
public void onResult(SHARE_MEDIA platform) {
Toast.makeText(ShareActivity.this,platform + " 分享成功啦", Toast.LENGTH_SHORT).show();
public void onError(SHARE_MEDIA platform, Throwable t) {
Toast.makeText(ShareActivity.this,platform + " 分享失败啦", Toast.LENGTH_SHORT).show();
public void onCancel(SHARE_MEDIA platform) {
Toast.makeText(ShareActivity.this,platform + " 分享取消了", Toast.LENGTH_SHORT).show();
值得注意的是,分享也应该重写onActivityResult()
1 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get( this ).onActivityResult( requestCode, resultCode, data);
获取用户信息和好友列表已授权的平台,可以获取用户信息(新浪微博可以获取用户好友列表)实现的方法与授权和解除授权类似:
1 mShareAPI = UMShareAPI.get(this);
3 初始化UMShareAPI,然后进行用户信息获取:
mShareAPI.getPlatformInfo(UserinfoActivity.this, platform, umAuthListener);
7 对于新浪微博好友列表的获取使用的接口是:
9 mShareAPI.getFriend(UserinfoActivity.this, SHARE_MEDIA.SINA, umGetfriendListener);
高级功能介绍:
对于以上介绍的基本功能已经可以实现一般用户的需求,对于特殊要求,我们进行了特别处理:
针对分享面板,我们进行了如下的处理:
针对不同平台使用不同监听器,以及分享不同内容
根据前面的介绍可以知道,使用ShareAction(this).setDisplayList( displaylist)可以进行分享面板的平台设置。同时使用setContentList(),可以进行不同分享内容的处理,使用setListenerList()进行不同回调的处理。
1 new ShareAction(this)
6 .setDisplayList( SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE, )
7 .setContentList(shareContent1,shareContent2)
8 .setCallback(umShareListener)
9 .withText( "umeng" )
10 .withMedia( image )
11 .setListenerList(listener1,listener2)
分享面板点击回调使用setShareboardclickCallback()可以进行分享面板不同按钮的点击回调,方便开发者进行特殊处理。
1 new ShareAction(this)
2 .setDisplayList( SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE, )
3 .withText( "umeng" )
4 .withMedia( image )
5 setShareboardclickCallback(shareBoardlistener)
分享面板增加自定义按钮如果需要对分享面板增加自定义的按钮,可以通过`ShareAction(this).addButton(String showword,String Keyword,String icon,String Grayicon)`进行设置其中第一个参数是显示的名字,第二个参数是平台名称,第三个参数是按钮图标的图片名字,第四个按钮是置灰情况下按钮图标的图片名字。对于自定义平台的监听需要使用上面提到的分享面板点击回调,如下
1 private ShareBoardlistener shareBoardlistener = new
ShareBoardlistener() {
public void onclick(SnsPlatform snsPlatform,SHARE_MEDIA share_media) {
if (share_media==null){
if (snsPlatform.mKeyword.equals("11")){
Toast.makeText(ShareActivity.this,"add button success",Toast.LENGTH_LONG).show();
new ShareAction(ShareActivity.this).setPlatform(share_media).setCallback(umShareListener)
.withText("多平台分享")
是新增按钮的回调监听是通过判断当获取平台为空时,keyword的值来进行确定的,并在对应的条件中进行处理即可。
获取客户端安装信息
1 获取客户端安装信息
2 //使用如下接口
4 mShareAPI.isInstall(this, SHARE_MEDIA.WEIXIN)
6 //关闭log和toast方法:
7 Log.LOG = false 8
9 Config.IsToastTip = false10 //开启回流统计的方法:
12 Config.isloadUrl = true
混淆为了保证引用友盟Social SDK jar文件以及腾讯jar文件被混淆,请在proguard.cfg文件中添加以下代码避免被混淆.
1 -dontshrink
-dontoptimize
-dontwarn com.google.android.maps.**
-dontwarn android.webkit.WebView
-dontwarn com.umeng.**
-dontwarn com.tencent.weibo.sdk.**
-dontwarn com.facebook.**
-keep public class javax.**
-keep public class android.webkit.**
-dontwarn android.support.v4.**
-keep enum com.facebook.**
-keepattributes Exceptions,InnerClasses,Signature
-keepattributes *Annotation*
-keepattributes SourceFile,LineNumberTable
-keep public interface com.facebook.**
-keep public interface com.tencent.**
-keep public interface com.umeng.socialize.**
-keep public interface com.umeng.socialize.sensor.**
-keep public interface com.umeng.scrshot.**
-keep public class com.umeng.socialize.* {*;}
-keep class com.facebook.**
-keep class com.facebook.** { *; }
-keep class com.umeng.scrshot.**
-keep public class com.tencent.** {*;}
-keep class com.umeng.socialize.sensor.**
-keep class com.umeng.socialize.handler.**
-keep class com.umeng.socialize.handler.*
-keep class com.tencent.mm.sdk.modelmsg.WXMediaMessage {*;}
-keep class com.tencent.mm.sdk.modelmsg.** implements com.tencent.mm.sdk.modelmsg.WXMediaMessage$IMediaObject {*;}
-keep class im.yixin.sdk.api.YXMessage {*;}
-keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;}
-dontwarn twitter4j.**
-keep class twitter4j.** { *; }
-keep class com.tencent.** {*;}
-dontwarn com.tencent.**
-keep public class com.umeng.soexample.R$*{
public static final int *;
-keep public class com.umeng.soexample.R$*{
public static final int *;
-keep class com.tencent.open.TDialog$*
-keep class com.tencent.open.TDialog$* {*;}
-keep class com.tencent.open.PKDialog
-keep class com.tencent.open.PKDialog {*;}
-keep class com.tencent.open.PKDialog$*
-keep class com.tencent.open.PKDialog$* {*;}
-keep class com.sina.** {*;}
-dontwarn com.sina.**
-keep class
com.alipay.share.sdk.** {
-keepnames class * implements android.os.Parcelable {
public static final ** CREATOR;
-keep class com.linkedin.** { *; }
-keepattributes Signature
private UMShareAPI umShareAPI;
//监听事件
private UMAuthListener umAuthListener = new UMAuthListener() {
//登录成功
public void onComplete(SHARE_MEDIA platform, int action,Map&String, String& data) {
Toast.makeText(MainActivity.this, "Authorize succeed", Toast.LENGTH_SHORT).show();
//获取用户信息
umShareAPI.getPlatformInfo(MainActivity.this, platform,new UMAuthListener() {
public void onError(SHARE_MEDIA arg0, int arg1,Throwable arg2) {
public void onComplete(SHARE_MEDIA arg0, int arg1,Map&String, String& data) {
Set&String& set = data.keySet();
for (String string : set) {
Log.i("msg",
"============================Map=========================");
Log.i("msg", string + "::::" + data.get(string));
String str = data.get(string);
// 设置头像
if(str!=null){
signMode.setVisibility(View.GONE);
header.setVisibility(View.VISIBLE);
if (string.equals("profile_image_url")) {
DisplayImageOptions options = null;
ImageLoader.getInstance().displayImage(str,mineHeader, options);
ImageLoader.getInstance().displayImage(str,mine, options);
// 设置昵称
if (string.equals("screen_name")) {
mineName.setText(str);
public void onCancel(SHARE_MEDIA arg0, int arg1) {
public void onError(SHARE_MEDIA platform, int action, Throwable t) {
Toast.makeText(MainActivity.this, "Authorize fail", Toast.LENGTH_SHORT).show();
public void onCancel(SHARE_MEDIA platform, int action) {
Toast.makeText(MainActivity.this, "Authorize cancel", Toast.LENGTH_SHORT).show();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PlatformConfig.setQQZone("","caab60104f0ba");
65 umShareAPI = UMShareAPI.get(this);
67 重写onActivityResult()
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
umShareAPI.onActivityResult(requestCode, resultCode, data);
Log.e("data", resultCode + "");
public void onClick(View v) {
switch (v.getId()) {
76 case R.id.qq_sign_button:
SHARE_MEDIA platform = SHARE_MEDIA.QQ;//此处是QQ授权
umShareAPI.doOauthVerify(this, platform, umAuthListener);
清单文件配置:
1 &uses-permission android:name="android.permission.INTERNET" /&
&uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&
&uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /&
&uses-permission android:name="android.permission.READ_PHONE_STATE" /&
&uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&
&uses-permission android:name="android.permission.INTERNET" /&
&uses-permission android:name="android.permission.READ_LOGS" /&
&uses-permission android:name="android.permission.CALL_PHONE" /&
&uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&
&uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /&
&uses-permission android:name="android.permission.GET_TASKS" /&
&uses-permission android:name="android.permission.SET_DEBUG_APP" /&
&uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /&
&uses-permission android:name="android.permission.GET_ACCOUNTS" /&
&uses-permission android:name="android.permission.USE_CREDENTIALS" /&
&uses-permission android:name="android.permission.MANAGE_ACCOUNTS" /&
&uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&
18 &activity
android:name="com.tencent.tauth.AuthActivity"
android:launchMode="singleTask"
android:noHistory="true"&
&intent-filter&
&action android:name="android.intent.action.VIEW" /&
&category android:name="android.intent.category.DEFAULT" /&
&category android:name="android.intent.category.BROWSABLE" /&
&data android:scheme="tencent" /&
&/intent-filter&
&/activity&
android:name="com.mon.AssistActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" /&
&meta-data
android:name="UMENG_APPKEY"
android:value="4eaee02c0003" /&
还是以QQ为例,清单文件配置同上:
1 平台信息
2 final SHARE_MEDIA[] displaylist = new SHARE_MEDIA[]
SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE, SHARE_MEDIA.SINA,
SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE, SHARE_MEDIA.DOUBAN
7 button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//多平台分享,这次实现的是shareBoardlistener监听
new ShareAction(MainActivity.this).setDisplayList(displaylist)
.withText("呵呵")//可以没有
.setShareboardclickCallback(shareBoardlistener)
19 private ShareBoardlistener shareBoardlistener = new ShareBoardlistener() {
public void onclick(SnsPlatform snsPlatform, SHARE_MEDIA share_media) {
Log.e("snsPlatform", snsPlatform + "" + "SHARE_MEDIA" + share_media + "");
23 //调用单平台分享
new ShareAction(MainActivity.this)
//参数改成share_media
.setPlatform(share_media)
.setCallback(new UMShareListener() {
public void onResult(SHARE_MEDIA platform) {
Toast.makeText(MainActivity.this, platform + " 分享成功啦", Toast.LENGTH_SHORT).show();
public void onError(SHARE_MEDIA platform, Throwable t) {
Toast.makeText(MainActivity.this, platform + " 分享失败啦", Toast.LENGTH_SHORT).show();
public void onCancel(SHARE_MEDIA platform) {
Toast.makeText(MainActivity.this, platform + " 分享取消了", Toast.LENGTH_SHORT).show();
.withText("Hello 豆瓣")
阅读(...) 评论()Android开发记录16-友盟第三方登录、分享实现 2014年博客之星,投票地址 本篇博客给大家分享一个笔者正在做的关于第三方登录、分享的实例,这里选用的是友盟社会化组件。 博客大纲如下:第三方登录流程友盟支持第三方登录的平台友盟社会化分享支持的平台集成友盟社会化组件流程友盟社会化SDK集成流程注意事项
第三方登录流程 以下这张图转自:/hooray/archive//2774499.html
移动应用授权效果图如下:
友盟支持第三方登录的平台 新浪微博、腾讯微博、QQ、QQ空间、微信、人人
友盟社会化分享支持的平台 国内平台:微信(微信好友及微信朋友圈)、QQ、Qzone、新浪微博、腾讯微博、人人网、豆瓣、短信、邮件、有道云笔记、来往、易信国外平台:Facebook、Twitter、Instagram、EverNote、Pocket、Pinterest、Linkedin、G+
集成友盟社会化组件流程注册友盟账号–登陆,在页面添加新应用,然后获取到Appkey申请第三方账号–参照文档:绑定第三方账号–参照文档:下载SDK–进入下载SDK页面(),勾选自己需要的功能进行下载 友盟社会化SDK集成流程 配置AndroidManifest.xml–权限、友盟AppKey、分享的相关组件复制指定平台的libs和res到项目中–每个平台对应的jar包和资源文件在代码中设置需要分享的平台和内容–传递平台appId/appKey参数并添加指定平台和分享的媒体内容注:代码详情查看我提供的Demo
实例代码:
o使用第三方登录的时候需要进行签名打包,不然在新浪SSO授权、微信分享会出现异常。o微信登录需要在微信开放平台申请开发者认证获取登录权限,不然无法完成授权
本文已收录于以下专栏:
相关文章推荐
想想Android Studio 和Eclipse ,我觉得你还是有必要入手Kotlin了。 站好队很重要。以前的一篇总体概括老文,大家可以看看~爽翻天!告别Java。一起来使用kotlin开发完整客...
本文系多方综合与转载整合,意在Android开发中能够知道和使用一些好用的第三方支持,省去自己的很多时间,下面涉及到的多为经过历史兴衰与检验的,江山代有人才出一代更比一代强,有些已经被更新更好用的所取...
在上一讲中[Android消息处理机制之Handler与Message],我们学习了Handler类与Message类的大概介绍,同事也遗留了一个问题,在获取Message对象的时候是不能用 &new...
本文系多方综合与转载整合,意在Android开发中能够知道和使用一些好用的第三方支持,省去自己的很多时间,下面涉及到的多为经过历史兴衰与检验的,江山代有人才出一代更比一代强,有些已经被更新更好用的所取...
1. 前言安卓属于小团队开发,架构的重要性在很多公司其实不是那么的明显,加上现在的开源框架层出不穷,更好的帮助我们上手android项目的开发。我前两年也在公司主导过项目开发,搭建过不少项目,以前主要...
一、兼容类库
ActionBarSherlock : Action Bar是Android 3.0后才开始支持的,ActionBarSherlock是让Action Bar功能支持2.X后的所有平...
最新百大框架排行榜 :适合Android初级开发工程师~~~中级开发工程师
知其然知其所以然 ; 中级、高级、资深工程师
知其然知其不可然
Android酷炫实用的开源框架(UI框架)前言忙碌的工作终于可以停息一段时间了,最近突然有一个想法,就是自己写一个app,所以找了一些合适开源控件,这样更加省时,再此分享给大家,希望能对大家有帮助,...
& 三种动画:View动画、帧动画、属性动画:
1. View animation只能应用于View对象,而且只支持一部分属性,渐变动画只支持四种类型:平移(Translate)、旋转(Rotate)...
相信大家对MVC,MVP和MVVM都不陌生,作为三个最耳熟能详的Android框架,它们的应用可以是非常广泛的,但是对于一些新手来说,可能对于区分它们三个都有困难,更别说在实际的项目中应用了,有些时候...
他的最新文章
讲师:汪剑
讲师:刘道宽
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)}

我要回帖

更多关于 友盟推送android 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信