友盟第三方登录和分享的使用

来源:互联网 发布:写一个数组去重 编辑:程序博客网 时间:2024/05/18 19:20

友盟第三方登录和分享的使用

获取友盟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-dataandroid:name="UMENG_APPKEY"android:value="4eaee02c527015373b000003" ></meta-data>
 
复制代码
复制代码
 1 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 2     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 3     <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 4     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 5     <uses-permission android:name="android.permission.INTERNET" /> 6     <uses-permission android:name="android.permission.READ_LOGS" /> 7     <uses-permission android:name="android.permission.CALL_PHONE" /> 8     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 9     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />10         <uses-permission android:name="android.permission.GET_TASKS" />11     <uses-permission android:name="android.permission.SET_DEBUG_APP" />12     <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />13     <uses-permission android:name="android.permission.GET_ACCOUNTS" />14     <uses-permission android:name="android.permission.USE_CREDENTIALS" />15     <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
复制代码

针对不平台所需要添加的数据

复制代码
 1  微信平台 2   3 <activity 4             android:name="com.umeng.example.wxapi.WXEntryActivity" 5             android:configChanges="keyboardHidden|orientation|screenSize" 6             android:exported="true" 7             android:screenOrientation="portrait" 8             android:theme="@android:style/Theme.Translucent.NoTitleBar" /> 9         10 人人网11 12 <activity13             android:name="com.renn.rennsdk.oauth.OAuthActivity"14             android:configChanges="orientation|navigation|keyboardHidden" />15 16 腾讯17 18<activity19   android:name="com.tencent.tauth.AuthActivity"20  android:launchMode="singleTask"21  android:noHistory="true" >22 <intent-filter>23 <action android:name="android.intent.action.VIEW" />24   <category android:name="android.intent.category.DEFAULT" />25 <category android:name="android.intent.category.BROWSABLE" />26 <data android:scheme="tencent100424468" />27  </intent-filter>28   </activity>29  <activity          android:name="com.tencent.connect.common.AssistActivity"30             android:screenOrientation="portrait"31             android:theme="@android:style/Theme.Translucent.NoTitleBar" />32 33 谷歌地图34       35 <uses-library36             android:name="com.google.android.maps"37             android:required="false" />38         <uses-library android:name="android.test.runner" />39 facebook40 <activity41             android:name="com.facebook.FacebookActivity"42             android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"43             android:label="@string/app_name"44             android:theme="@android:style/Theme.Translucent.NoTitleBar" />45         <provider         android:name="com.facebook.FacebookContentProvider"         android:authorities="com.facebook.app.FacebookContentProvider+appid"46 android:exported="true" />47  <meta-data48   android:name="com.facebook.sdk.ApplicationId"49   android:value="@string/facebook_app_id" />50 51 新浪微博52 53  <activity54             android:name=".WBShareActivity"55             android:configChanges="keyboardHidden|orientation"56             android:screenOrientation="portrait" >57             <intent-filter>58                 <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />59                 <category android:name="android.intent.category.DEFAULT" />60             </intent-filter>61         </activity> 62 <activity63             android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser"64             android:configChanges="keyboardHidden|orientation"65             android:windowSoftInputMode="adjustResize"66             android:exported="false" >67         </activity>68         69 <service android:name="com.sina.weibo.sdk.net.DownloadService"70             android:exported="false"></service>71             72 支付宝73 74<activity75             android:name=".apshare.ShareEntryActivity"76             android:configChanges="keyboardHidden|orientation|screenSize"77             android:exported="true"78             android:screenOrientation="portrait"79             android:theme="@android:style/Theme.Translucent.NoTitleBar" />
复制代码

4.  打开平台选择面板

4.1  各个平台的配置,建议放在全局Application或者程序入口

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

说明:需要使用第三方公司api的平台,新浪,腾讯等,是需要去申请appkey的。人人豆瓣只能在服务器端设置。其它需要配置appid的平台,如qq,微信,易信,twitter等都需要在本地设置。还有一部分平台需要在mainfest中配置,前面已经提到过。
授权
目前友盟社会化组件支持的第三方登录平台为:新浪微博、QQ、微信、人人网、豆瓣。(特别说明:QQ空间,qq微博使用qq授权)
首先获取UMShareAPI

1  private UMShareAPI mShareAPI;2 mShareAPI = UMShareAPI.get( this ); 

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

复制代码
 1 SHARE_MEDIA platform = SHARE_MEDIA.SINA;  2      mShareAPI.doOauthVerify(this, platform, umAuthListener) 3      private UMAuthListener umAuthListener = new UMAuthListener() { 4         @Override 5         public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) { 6             Toast.makeText( getApplicationContext(), "Authorize succeed", Toast.LENGTH_SHORT).show(); 7         } 8  9         @Override10         public void onError(SHARE_MEDIA platform, int action, Throwable t) {11             Toast.makeText( getApplicationContext(), "Authorize fail", Toast.LENGTH_SHORT).show();12         }13 14         @Override15         public void onCancel(SHARE_MEDIA platform, int action) {16             Toast.makeText( getApplicationContext(), "Authorize cancel", Toast.LENGTH_SHORT).show();17         }18     };
复制代码

对于删除授权使用的接口是

mShareAPI.deleteOauth(AuthActivity.this, platform, umdelAuthListener);

注意要重写

复制代码
1 onActivityResult()2 3      @Override4     protected void onActivityResult(int requestCode, int resultCode, Intent data) {5         super.onActivityResult(requestCode, resultCode, data);6         mShareAPI.onActivityResult(requestCode, resultCode, data);7     } 
复制代码

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

分享

自定义shareboard:

复制代码
 1 final SHARE_MEDIA[] displaylist = new SHARE_MEDIA[] 2                         { 3                             SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE,SHARE_MEDIA.SINA, 4                             SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE,SHARE_MEDIA.DOUBAN 5                         }; 6                 new ShareAction(this).setDisplayList( displaylist ) 7                         .withText( "呵呵" ) 8                         .withMedia( image ) 9                         .setShareboardclickCallback(shareBoardlistener)10                         .open();11 自定义shareboard需要,指明需要显示的平台,放入shareaction中,并执行open方法即可。12 shareboard点击响应回调方法如下:13 14      private ShareBoardlistener shareBoardlistener = new ShareBoardlistener() {15 16         @Override17         public void onclick(SHARE_MEDIA share_media) {18           19         }20     };
复制代码

单平台直接分享:

复制代码
1 new ShareAction(this)2      .setPlatform(SHARE_MEDIA.DOUBAN)3      .setCallback(umShareListener)4       .withText("Hello 豆瓣")5       .withMedia(image)6        .share();7 选取分享的平台,设定分享回调接口和内容,并执行share方法。
复制代码

回调接口如下:

复制代码
 1  new UMShareListener() { 2         @Override 3         public void onResult(SHARE_MEDIA platform) { 4             Toast.makeText(ShareActivity.this,platform + " 分享成功啦", Toast.LENGTH_SHORT).show(); 5         } 6  7         @Override 8         public void onError(SHARE_MEDIA platform, Throwable t) { 9             Toast.makeText(ShareActivity.this,platform + " 分享失败啦", Toast.LENGTH_SHORT).show();10         }11 12         @Override13         public void onCancel(SHARE_MEDIA platform) {14             Toast.makeText(ShareActivity.this,platform + " 分享取消了", Toast.LENGTH_SHORT).show();15         }16     };
复制代码

值得注意的是,分享也应该重写onActivityResult()

1 @Override2     protected void onActivityResult(int requestCode, int resultCode, Intent data) {3         super.onActivityResult(requestCode, resultCode, data);4         UMShareAPI.get( this ).onActivityResult( requestCode, resultCode, data);5     }

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

复制代码
1 mShareAPI = UMShareAPI.get(this);2 3 初始化UMShareAPI,然后进行用户信息获取:4 5  mShareAPI.getPlatformInfo(UserinfoActivity.this, platform, umAuthListener);6 7 对于新浪微博好友列表的获取使用的接口是:8 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)12  .open();
复制代码

分享面板点击回调
使用setShareboardclickCallback()可以进行分享面板不同按钮的点击
回调,方便开发者进行特殊处理。

1 new ShareAction(this)2 .setDisplayList( SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE, )3 .withText( "umeng" )4 .withMedia( image )5 setShareboardclickCallback(shareBoardlistener)6  .open();

分享面板增加自定义按钮
如果需要对分享面板增加自定义的按钮,可以通过`ShareAction(this).addButton(String showword,String Keyword,String icon,String Grayicon)`
进行设置其中第一个参数是显示的名字,第二个参数是平台名称,第三个参数是按钮图标的图片名字,第四个按钮是置灰情况下按钮图标的图片名字。
对于自定义平台的监听需要使用上面提到的分享面板点击回调,如下

复制代码
 1 private ShareBoardlistener shareBoardlistener = new  ShareBoardlistener() { 2            3         @Override 4         public void onclick(SnsPlatform snsPlatform,SHARE_MEDIA share_media) { 5             if (share_media==null){ 6                 if (snsPlatform.mKeyword.equals("11")){ 7                     Toast.makeText(ShareActivity.this,"add button success",Toast.LENGTH_LONG).show(); 8                 } 9                 10             }11             else {12                 new ShareAction(ShareActivity.this).setPlatform(share_media).setCallback(umShareListener)13                         .withText("多平台分享")14                         .share();15             }16         }17     };18  是新增按钮的回调监听是通过判断当获取平台为空时,keyword的值来进行确定的,并在对应的条件中进行处理即可。
复制代码

获取客户端安装信息

复制代码
 1 获取客户端安装信息 2 //使用如下接口 3  4 mShareAPI.isInstall(this, SHARE_MEDIA.WEIXIN) 5  6 //关闭log和toast方法: 7 Log.LOG = false 8  9 Config.IsToastTip = false10 //开启回流统计的方法:11 12 Config.isloadUrl = true
复制代码

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

复制代码
 1 -dontshrink 2  -dontoptimize 3  -dontwarn com.google.android.maps.** 4  -dontwarn android.webkit.WebView 5  -dontwarn com.umeng.** 6  -dontwarn com.tencent.weibo.sdk.** 7  -dontwarn com.facebook.** 8  -keep public class javax.** 9  -keep public class android.webkit.**10  -dontwarn android.support.v4.**11  -keep enum com.facebook.**12  -keepattributes Exceptions,InnerClasses,Signature13  -keepattributes *Annotation*14  -keepattributes SourceFile,LineNumberTable15  16  -keep public interface com.facebook.**17  -keep public interface com.tencent.**18  -keep public interface com.umeng.socialize.**19  -keep public interface com.umeng.socialize.sensor.**20  -keep public interface com.umeng.scrshot.**21  22  -keep public class com.umeng.socialize.* {*;}23  24  25  -keep class com.facebook.**26  -keep class com.facebook.** { *; }27  -keep class com.umeng.scrshot.**28  -keep public class com.tencent.** {*;}29  -keep class com.umeng.socialize.sensor.**30  -keep class com.umeng.socialize.handler.**31  -keep class com.umeng.socialize.handler.*32  -keep class com.tencent.mm.sdk.modelmsg.WXMediaMessage {*;}33  -keep class com.tencent.mm.sdk.modelmsg.** implements com.tencent.mm.sdk.modelmsg.WXMediaMessage$IMediaObject {*;}34  35  -keep class im.yixin.sdk.api.YXMessage {*;}36  -keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;}37  38  -dontwarn twitter4j.**39  -keep class twitter4j.** { *; }40  41  -keep class com.tencent.** {*;}42  -dontwarn com.tencent.**43  -keep public class com.umeng.soexample.R$*{44      public static final int *;45  }46  -keep public class com.umeng.soexample.R$*{47      public static final int *;48  }49  -keep class com.tencent.open.TDialog$*50  -keep class com.tencent.open.TDialog$* {*;}51  -keep class com.tencent.open.PKDialog52  -keep class com.tencent.open.PKDialog {*;}53  -keep class com.tencent.open.PKDialog$*54  -keep class com.tencent.open.PKDialog$* {*;}55  56  -keep class com.sina.** {*;}57  -dontwarn com.sina.**58  -keep class  com.alipay.share.sdk.** {59     *;60  }61  -keepnames class * implements android.os.Parcelable {62      public static final ** CREATOR;63  }64  65  -keep class com.linkedin.** { *; }66  -keepattributes Signature
复制代码

具体实现:

登录:

复制代码
 1  private UMShareAPI umShareAPI; 2     //监听事件 3     private UMAuthListener umAuthListener = new UMAuthListener() { 4     //登录成功 5         @Override 6         public void onComplete(SHARE_MEDIA platform, int action,Map<String, String> data) { 7             Toast.makeText(MainActivity.this, "Authorize succeed", Toast.LENGTH_SHORT).show(); 8             //获取用户信息 9             umShareAPI.getPlatformInfo(MainActivity.this, platform,new UMAuthListener() {10                         @Override11                         public void onError(SHARE_MEDIA arg0, int arg1,Throwable arg2) {12 13                         }14                         //成功15                         @Override16                         public void onComplete(SHARE_MEDIA arg0, int arg1,Map<String, String> data) {17                             Set<String> set = data.keySet();18                             for (String string : set) {19                                 Log.i("msg",20                                         "============================Map=========================");21                                 Log.i("msg", string + "::::" + data.get(string));22                                 String str = data.get(string);23                                 // 设置头像24                                 if(str!=null){25                                     signMode.setVisibility(View.GONE);26                                     header.setVisibility(View.VISIBLE);27                                     if (string.equals("profile_image_url")) {28                                         DisplayImageOptions options = null;29                                         ImageLoader.getInstance().displayImage(str,mineHeader, options);30                                         ImageLoader.getInstance().displayImage(str,mine, options);31                                     }32                                     // 设置昵称33                                     if (string.equals("screen_name")) {34                                         mineName.setText(str);35                                     }36                                 }37 38 39                             }40 41                         }42     43                         @Override44                         public void onCancel(SHARE_MEDIA arg0, int arg1) {45 46                         }47                     });48         }49 50         @Override51         public void onError(SHARE_MEDIA platform, int action, Throwable t) {52             Toast.makeText(MainActivity.this, "Authorize fail", Toast.LENGTH_SHORT).show();53         }54 55         @Override56         public void onCancel(SHARE_MEDIA platform, int action) {57             Toast.makeText(MainActivity.this, "Authorize cancel", Toast.LENGTH_SHORT).show();58         }59     };60  @Override61     protected void onCreate(Bundle savedInstanceState) {62         super.onCreate(savedInstanceState);63         setContentView(R.layout.activity_main);64     PlatformConfig.setQQZone("100424468","c7394704798a158208a74ab60104f0ba");65 umShareAPI = UMShareAPI.get(this);66 }67 重写onActivityResult()68         public void onActivityResult(int requestCode, int resultCode, Intent data) {69             super.onActivityResult(requestCode, resultCode, data);70             umShareAPI.onActivityResult(requestCode, resultCode, data);71             Log.e("data", resultCode + "");72 73         }74  public void onClick(View v) {75         switch (v.getId()) {76 case R.id.qq_sign_button:77                 SHARE_MEDIA platform = SHARE_MEDIA.QQ;//此处是QQ授权78                 umShareAPI.doOauthVerify(this, platform, umAuthListener);79                 break;80             }81 }                                
复制代码

清单文件配置:

复制代码
 1 <uses-permission android:name="android.permission.INTERNET" /> 2     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 3     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 4     <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 5     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 6     <uses-permission android:name="android.permission.INTERNET" /> 7     <uses-permission android:name="android.permission.READ_LOGS" /> 8     <uses-permission android:name="android.permission.CALL_PHONE" /> 9     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />10     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />11     <uses-permission android:name="android.permission.GET_TASKS" />12     <uses-permission android:name="android.permission.SET_DEBUG_APP" />13     <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />14     <uses-permission android:name="android.permission.GET_ACCOUNTS" />15     <uses-permission android:name="android.permission.USE_CREDENTIALS" />16     <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />17     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />18 <activity19             android:name="com.tencent.tauth.AuthActivity"20             android:launchMode="singleTask"21             android:noHistory="true">22             <intent-filter>23                 <action android:name="android.intent.action.VIEW" />24 25                 <category android:name="android.intent.category.DEFAULT" />26                 <category android:name="android.intent.category.BROWSABLE" />27 28                 <data android:scheme="tencent100424468" />29             </intent-filter>30         </activity>31         <activity32             android:name="com.tencent.connect.common.AssistActivity"33             android:screenOrientation="portrait"34             android:theme="@android:style/Theme.Translucent.NoTitleBar" />35 36         <meta-data37             android:name="UMENG_APPKEY"38             android:value="4eaee02c527015373b000003" />
复制代码

分享:

还是以QQ为例,清单文件配置同上:

复制代码
 1 平台信息 2 final SHARE_MEDIA[] displaylist = new SHARE_MEDIA[] 3             { 4                     SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE, SHARE_MEDIA.SINA, 5                     SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE, SHARE_MEDIA.DOUBAN 6             }; 7 button.setOnClickListener(new View.OnClickListener() { 8             @Override 9             public void onClick(View v) {10              11 12                 //多平台分享,这次实现的是shareBoardlistener监听13                 new ShareAction(MainActivity.this).setDisplayList(displaylist)14                         .withText("呵呵")//可以没有15                         .setShareboardclickCallback(shareBoardlistener)16                         .open();17             }18         });19 private ShareBoardlistener shareBoardlistener = new ShareBoardlistener() {20         @Override21         public void onclick(SnsPlatform snsPlatform, SHARE_MEDIA share_media) {22             Log.e("snsPlatform", snsPlatform + "" + "SHARE_MEDIA" + share_media + "");23 //调用单平台分享24             new ShareAction(MainActivity.this)25                     //参数改成share_media26                     .setPlatform(share_media)27                     .setCallback(new UMShareListener() {28                         @Override29                         public void onResult(SHARE_MEDIA platform) {30                             Toast.makeText(MainActivity.this, platform + " 分享成功啦", Toast.LENGTH_SHORT).show();31                         }32 33                         @Override34                         public void onError(SHARE_MEDIA platform, Throwable t) {35                             Toast.makeText(MainActivity.this, platform + " 分享失败啦", Toast.LENGTH_SHORT).show();36                         }37 38                         @Override39                         public void onCancel(SHARE_MEDIA platform) {40                             Toast.makeText(MainActivity.this, platform + " 分享取消了", Toast.LENGTH_SHORT).show();41                         }42                     })43                     .withText("Hello 豆瓣")44                     .share();45         }46     };            
复制代码
0 0
原创粉丝点击