友盟官方文档

摘要:
共享授权和评论功能被隔离,以使结构更清晰。注意:本文中的示例代码仅具有共享和授权功能,界面已进行了调整。如果开发者需要原始功能,请继续使用v4.3.0#获取优梦Appkey如果您以前在优梦注册过应用程序并获得了Appkey,您可以继续使用它。如果您尚未在优梦注册开发者帐户,您需要先注册,注册后登录您的帐户,单击“添加新应用程序”,然后填写应用程序库信息。之后,您将进入“下载SDK并添加代码”页面,该页面将获取Appkey。

#  产品概述
关于分享和授权的sdk接口,我们在v4.4.0做出了巨大的改变,精简了接口调用的代码。并将分享授权,与评论等功能做出了隔离,使结构更加清晰。所以本版本的功能也只有分享与授权并无其他功能,请开发者注意。

注意:本文示例代码只有分享与授权功能,并对接口进行了调整,如需要原功能的开发者,请继续使用v4.3.0版本。

# 获取友盟Appkey
如果你之前已经在友盟注册了应用,并获取到了Appkey,可以继续使用它.

如果你尚未在友盟注册开发者账号,需要先注册,注册之后登录你的账号,点击添加新应用,填写完应用基本信息后,将进入"下载SDK并添加代码"页面,此页面即可得到Appkey。


#  下载并安装SDK
* 下载[SDK最新版](http://dev.umeng.com/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

`  <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="4eaee02c527015373b000003" >
</meta-data>`
       
   增加权限
       
`  <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" />'`

* 针对不平台所需要添加的数据
 
 微信平台
 
 `  <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" />`
       
人人网

`<activity
            android:name="com.renn.rennsdk.oauth.OAuthActivity"
            android:configChanges="orientation|navigation|keyboardHidden" />`

腾讯

` <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="tencent100424468" />
 </intent-filter>
  </activity>
 <activity          android:name="com.tencent.connect.common.AssistActivity"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />`

谷歌地图
     
 ` <uses-library
            android:name="com.google.android.maps"
            android:required="false" />
        <uses-library android:name="android.test.runner" />`
facebook
`<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" />
        <provider         android:name="com.facebook.FacebookContentProvider"         android:authorities="com.facebook.app.FacebookContentProvider+appid"
android:exported="true" />
 <meta-data
  android:name="com.facebook.sdk.ApplicationId"
  android:value="@string/facebook_app_id" />`

新浪微博

` <activity
            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>
<activity
            android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser"
            android:configChanges="keyboardHidden|orientation"
            android:windowSoftInputMode="adjustResize"
            android:exported="false" >
        </activity>`
       
`<service android:name="com.sina.weibo.sdk.net.DownloadService"
            android:exported="false"></service>`
           
支付宝

  `<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或者程序入口



       PlatformConfig.setWeixin("wx967daebe835fbeac", "5bb696d9ccd75a38c8a0bfe0675559b3");
       //微信 appid appsecret
      PlatformConfig.setSinaWeibo("3921700954","04b48b094faeb16683c32669824ebdad");
       //新浪微博 appkey appsecret     PlatformConfig.setYixin("yxc0614e80c9304c11b0391514d09f13bf");
        //易信 appkey        PlatformConfig.setRenren("201874","28401c0964f04a72a14c812d6132fcef","3bf66e42db1e4fa9829b955cc300b737");
        //人人 appid appkey appsecret
        PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
        // qq qzone appid appkey
        PlatformConfig.setAlipay("2015111700822536");
        //alipay appid


`说明:需要使用第三方公司api的平台,新浪,腾讯等,是需要去申请appkey的。人人豆瓣只能在服务器端设置。其它需要配置appid的平台,如qq,微信,易信,twitter等都需要在本地设置。还有一部分平台需要在mainfest中配置,前面已经提到过。`


##  授权
授权
目前友盟社会化组件支持的第三方登录平台为:新浪微博、QQ、微信、人人网、豆瓣。(特别说明:QQ空间,qq微博使用qq授权)
首先获取UMShareAPI


     mShareAPI = UMShareAPI.get( this );

选取需要授权的平台,并进行授权,其中umAuthLisrener是回调监听器,需要开发者根据需求重新定义


     SHARE_MEDIA platform = SHARE_MEDIA.SINA;
     mShareAPI.doOauthVerify(this, platform, umAuthListener)
     private UMAuthListener umAuthListener = new UMAuthListener() {
        @Override
        public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
            Toast.makeText( getApplicationContext(), "Authorize succeed", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onError(SHARE_MEDIA platform, int action, Throwable t) {
            Toast.makeText( getApplicationContext(), "Authorize fail", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onCancel(SHARE_MEDIA platform, int action) {
            Toast.makeText( getApplicationContext(), "Authorize cancel", Toast.LENGTH_SHORT).show();
        }
    };


友盟第三方登录获取QQ信息(原文:http://blog.csdn.net/sfy666666/article/details/51559117)
在登录成功的onComplete方法中加如下代码:
[java] view plain copy 在CODE上查看代码片派生到我的代码片
mShareAPI.getPlatformInfo(HomeActivity.this, platform,
new UMAuthListener() {

@Override
public void onError(SHARE_MEDIA arg0, int arg1,
Throwable arg2) {

}

@Override
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 (string.equals("profile_image_url")) {
ImageLoader.getInstance().displayImage(str,
menu_headicon, options);
ImageLoader.getInstance().displayImage(str,
headicon, options);
}
// 设置昵称
if (string.equals("screen_name")) {
menu_name.setText(str);
}

}

}

@Override
public void onCancel(SHARE_MEDIA arg0, int arg1) {

}
});


对于删除授权使用的接口是
`mShareAPI.deleteOauth(AuthActivity.this, platform, umdelAuthListener);`

不难看出与授权的参数是一样的。

注意要重写onActivityResult()

     @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        mShareAPI.onActivityResult(requestCode, resultCode, data);
    }

`平台授权,是需要安装对应的客户端的。新浪微博,豆瓣网,人人网除外,这三个平台如果本地安装了对应平台是走本地授权,如果没有安装,需要走网络授权`


##分享
分享分为两部分

###自定义shareboard:

    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)
                        .open();
自定义shareboard需要,指明需要显示的平台,放入shareaction中,并执行open方法即可。
shareboard点击响应回调方法如下:

     private ShareBoardlistener shareBoardlistener = new ShareBoardlistener() {

        @Override
        public void onclick(SHARE_MEDIA share_media) {
         
        }
    };

###单平台直接分享:

     new ShareAction(this)
     .setPlatform(SHARE_MEDIA.DOUBAN)
     .setCallback(umShareListener)
      .withText("Hello 豆瓣")
      .withMedia(image)
       .share();
选取分享的平台,设定分享回调接口和内容,并执行share方法。
回调接口如下:


     new UMShareListener() {
        @Override
        public void onResult(SHARE_MEDIA platform) {
            Toast.makeText(ShareActivity.this,platform + " 分享成功啦", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onError(SHARE_MEDIA platform, Throwable t) {
            Toast.makeText(ShareActivity.this,platform + " 分享失败啦", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onCancel(SHARE_MEDIA platform) {
            Toast.makeText(ShareActivity.this,platform + " 分享取消了", Toast.LENGTH_SHORT).show();
        }
    };
值得注意的是,分享也应该重写onActivityResult()
   

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        UMShareAPI.get( this ).onActivityResult( requestCode, resultCode, data);
    }


##获取用户信息和好友列表
已授权的平台,可以获取用户信息(新浪微博可以获取用户好友列表)
实现的方法与授权和解除授权类似:

`mShareAPI = UMShareAPI.get(this);`

初始化UMShareAPI,然后进行用户信息获取:

` mShareAPI.getPlatformInfo(UserinfoActivity.this, platform, umAuthListener);`

对于新浪微博好友列表的获取使用的接口是:

` mShareAPI.getFriend(UserinfoActivity.this, SHARE_MEDIA.SINA, umGetfriendListener);`


##高级功能介绍:
对于以上介绍的基本功能已经可以实现一般用户的需求,对于特殊要求,我们进行了特别处理:
针对分享面板,我们进行了如下的处理:
###针对不同平台使用不同监听器,以及分享不同内容
根据前面的介绍可以知道,使用ShareAction(this).setDisplayList( displaylist)可以进行分享面板的平台设置。同时使用setContentList(),可以进行不同分享内容的处理,使用setListenerList()进行不同回调的处理。
`new ShareAction(this)
.setDisplayList( SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE, )
.setContentList(shareContent1,shareContent2)
.setCallback(umShareListener)
.withText( "umeng" )
.withMedia( image )
.setListenerList(listener1,listener2)
 .open();
                          `
###分享面板点击回调
使用setShareboardclickCallback()可以进行分享面板不同按钮的点击
回调,方便开发者进行特殊处理。

`new ShareAction(this)
.setDisplayList( SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE, )
.withText( "umeng" )
.withMedia( image )
setShareboardclickCallback(shareBoardlistener)
 .open();`

###分享面板增加自定义按钮
如果需要对分享面板增加自定义的按钮,可以通过`ShareAction(this).addButton(String showword,String Keyword,String icon,String Grayicon)`
进行设置其中第一个参数是显示的名字,第二个参数是平台名称,第三个参数是按钮图标的图片名字,第四个按钮是置灰情况下按钮图标的图片名字。
对于自定义平台的监听需要使用上面提到的分享面板点击回调,如下:
 
         
      private ShareBoardlistener shareBoardlistener = new  ShareBoardlistener() {
         
        @Override
        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();
                }
               
            }
            else {
                new ShareAction(ShareActivity.this).setPlatform(share_media).setCallback(umShareListener)
                        .withText("多平台分享")
                        .share();
            }
        }
    };
 是新增按钮的回调监听是通过判断当获取平台为空时,keyword的值来进行确定的,并在对应的条件中进行处理即可。
 
###获取客户端安装信息
使用如下接口

`mShareAPI.isInstall(this, SHARE_MEDIA.WEIXIN)`

###关闭log和toast方法:
`Log.LOG = false`

`Config.IsToastTip = false`
###开启回流统计的方法:

`Config.isloadUrl = true`
###高级功能收集
由于本次api版本改动较大,对于新版的sdk有特殊需求的用户,可以联系我们的客服,我们将在版本更新中继续添加更多有用的新功能。

#微信集成相关说明

微信集成注意以下几点

正确填写AppID。
工程的包名必须同申请应用的包名一致。
在微信开放平台填写你App的的签名,测试、发布时要保证App的签名跟微信开放平台的签名一致。
开发者的应用需要通过审核。开发者在申请应用必须要通过微信官网的审核才能进行调试。
Demo中集成的微信无法使用?

原因:Demo中使用的微信AppID绑定的签名信息和你打包时所用的签名信息不一致,导致无法响应. 解决办法有两个,您任选其一:

申请一个测试Demo中AppID.(申请地址).
填写"包名"时请使用Demo的包名"com.umeng.soexample".
填写"签名"使用签名生成工具(签名工具)生成,签名时填写Demo的包名.
获取微信AppID后替换Demo中的使用的AppID.
使用SDK中的 debug.keystore编译运行Demo工程.


#微信签名说明
由于微信的签名过程跟验证流程较多,出错的可能性较大,这里将对微信的签名过程跟验证做详细的说明。

##  获取签名文件
获取应用签名方式有两种
###方式一:
用eclipse导出 带签名 的apk文件,注意此时选择的签名文件是你发布app时的签名文件。在导出的最后一步,eclipse会显示一个Certificate fingerprints(证书指纹),如下图。此时找到MD5值,将该MD5值复制出来,按照“ 去掉冒号(:),大写转小写 ”的规则装换,此时字符串就是签名。
###方式二:
导出 带签名 的apk文件,将该apk文件安装至手机中。安装微信的签名工具,打开GenSignature应用程序,填写你App的包名,点击“Get Signature”即可得到签名。

##  请在微信开放平台申请应用
1:填写App的相关信息,注意确保包名跟签名填写正确,填写完成提交微信审核。

##  微信集成测试
在进行微信集成测试时,请填写你申请App的AppID。测试时需要导出带签名的apk文件测试,否则将不能正常分享。

## 微信和微信朋友圈的回调
如果在您的项目中集成了微信或者微信朋友圈,并且您需要准确的分享回调,则需要在AndroidManifest.xml中下注册下面的回调Activity。
`<activity
   android:name=".wxapi.WXEntryActivity"
   android:theme="@android:style/Theme.Translucent.NoTitleBar"
   android:configChanges="keyboardHidden|orientation|screenSize"
   android:exported="true"
   android:screenOrientation="portrait" />`
  
   然后将SDK包中platforms/weixin目录下的wxapi文件夹拷贝到您的工程的包目录下, 然后修改WXEntryActivity的完整路径即可。
例如social_sdk_example的包名为com.umeng.soexample,因此将wxapi文件夹拷贝到com.umeng.soexample下,最终WXEntryActivity的 完整路径为com.umeng.soexample.wxapi.WXEntryActivity。
其中分享的回调接口SnsPostListener的onComplete方法的第二个参数代表分享的状态码,当值为200时表示分享成功;其余的值则为分享失败。

**微信集成相关说明**

微信集成注意以下几点

正确填写AppID。
工程的包名必须同申请应用的包名一致。
在微信开放平台填写你App的的签名,测试、发布时要保证App的签名跟微信开放平台的签名一致。
开发者的应用需要通过审核。开发者在申请应用必须要通过微信官网的审核才能进行调试。
Demo中集成的微信无法使用?

原因:Demo中使用的微信AppID绑定的签名信息和你打包时所用的签名信息不一致,导致无法响应. 解决办法有两个,您任选其一:

申请一个测试Demo中AppID.(申请地址).
填写"包名"时请使用Demo的包名"com.umeng.soexample".
填写"签名"使用签名生成工具(签名工具)生成,签名时填写Demo的包名.
获取微信AppID后替换Demo中的使用的AppID.
使用SDK中的 debug.keystore编译运行Demo工程.

# 应用信息注册地址列表
下面是Social SDK不同平台应用信息注册网站的地址:

平台    网址
新浪微博    http://open.weibo.com
腾讯微博    http://dev.t.qq.com
QQ空间  http://open.qq.com/
微信好友    http://open.weixin.qq.com
FaceBook    https://developers.facebook.com
人人    http://dev.renren.com
豆瓣    http://developers.douban.com/

#混淆
为了保证引用友盟Social SDK jar文件以及腾讯jar文件被混淆,请在proguard.cfg文件中添加以下代码避免被混淆.


`-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


`

 

免责声明:内容来源于网络,仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇DES加密/解密类。CodeForces-1178F1 Short Colorful Strip 区间DP下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

net core 模型绑定与之前版本的不同-FromBody 必须对应Json格式

之前有一个用于七牛上传图片的Callback Url的WebAPI (之前是用.net4.0,运行正常) 代码如下: //七牛CallBack地址,CallbackBody内容name=upload/member/1.jpg&hash=Fn6qeQi4VDLQ347NiRm-RlQx_4O2 public objec...

C# 配合 Easyui DataGrid 实现增删改查 通用模板

前端代码: <table id="DataGridEmployee"data-options="region:'center',title:'员工列表'"></table>$('#DataGridEmployee').datagrid({ title: '员工列表',...

魅族推送 简介 集成 MD

Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina.com 目录 目录魅族推送简介FAQ简洁版自定义消息推送DemoReceiver配置文件AndroidManifest.xml 魅族推...

AES对称加密和解密(转)

AES对称加密和解密 package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAl...

在springmvc中配置jedis(转)

主要学习https://github.com/thinkgem/jeesite。一下代码均参考于此并稍作修改。 1.jedis 首先,需要添加jedis: <!--jedis--> <dependency> <groupId>redis.clients</groupId> &l...

Android API Levels 详解

Android API Levels 当你开发你的Android应用程序时,了解该平台API变更管理的基本方法和概念是很有帮助的。同样的,知道API级别标识以及该标识如何保障你的应用与实际硬件设备相兼容对于开发及后续的发布、维护都是有益的。 本节内容告诉你API级别的知识,以及它如何影响你开发和使用的应用。 关于如何使用“以API级别进行过滤”来使用API...