友盟+搜索

{{errorMsg}}

获取SDK

友盟微社区Android SDK下载最新的SDK。

下载SDK操作流程

在微社区最新版本上点击[SDK下载] -> [精简版SDK] -> [SDK下载]

SDK组件说明

1.Demo工程:
包含精简版SDK的Demo,开发者可以通过查看代码来了解SDK的使用。

SDK文件目录介绍

1.opensource -- UI开源代码

umeng_community_android_db -- 本地数据模块  
umeng_community_android_ui_main -- 公⽤用基础UI   
umeng_community_android_ui_simplify -- 精简版UI

2.umeng_community_android_sdk_library -- 微社区SDK部分

api_doc -- 集成文档
login -- 登录模块    
core -- 微社区底层业务模块  
ui -- 主UI的SDK部分  
umeng_community_demo_simplify -- Demo工程
umeng_community_simplify_library_project -- 微社区的library工程,当作为工程引用时使用

3.umeng_community_tool.jar -- 微社区集成工具,使用说明详见[集成工具使用说明.pdf]

集成SDK(入门篇)

按照该部分的操作步骤,可以将微社区SDK集成到项目中,并使用微社区默认界面。

步骤1-将SDK导入到工程

开发环境-Eclipse

添加工程引用

将文件夹中的umeng_community_library_project文件夹导入Eclipse,并在您的工程中添加对此项目的引用即可。

1 微社区源工程文件目录,如下图:

2 微社区源工程设置方法,如下图:

3 开发者自有工程设置方法,如下图:

添加Jar包到现有项目中

将文件夹中的umeng_community_android_sdk_library文件目录下的core、login、ui(目录下的db,main, simplify) 目录中libs跟res文件夹复制到你的项目工程相应的目录下(如使用'ADT 17'以下用户需要手动添加'libs'下的jar文件到工程Path中):

开发环境-Android Studio

在Android Studio中,选择File->New->Import Module…,选择微社区SDK中的umeng_community_library_project文件夹。

添加Module 如图:

选择文件目录,点击[Finish] 如图:

步骤2-环境配置(AndroidManifest.xml)

将下面几个配置拷贝到AndroidManifest.xml中相应的位置.

权限配置

微社区SDK可能使用到的系统权限

     <!-- 检测网络状态 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <!-- 获取mac地址作为用户的备用唯一标识 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <!-- 获取用户手机的IMEI,用来唯一的标识用户 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        <!-- 缓存资源优先存入SDcard -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <!-- 允许应用程序联网,以便向我们的服务器端发送数据 -->
    <uses-permission android:name="android.permission.INTERNET" />

微社区的Activity注册

    <activity
        android:name="com.umeng.simplify.ui.activities.FeedDetailActivity"
        android:configChanges="orientation|keyboardHidden"
        android:launchMode="singleTask"
        android:windowSoftInputMode="stateHidden|adjustResize" />


    <activity android:name="com.umeng.common.ui.activities.SettingActivity" />

    <activity android:name="com.umeng.common.ui.activities.AlbumActivity" />

    <activity android:name="com.umeng.common.ui.imagepicker.PhotoSelectorActivity" />
    <activity android:name="com.umeng.common.ui.imagepicker.PhotoPreviewActivity" />
    <activity
        android:name="com.umeng.common.ui.activities.MessageChatActivity"
        android:windowSoftInputMode="adjustResize" />


    <!--精简版-->
    <activity
        android:name="com.umeng.simplify.ui.activities.FindActivity"
        android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="stateHidden|adjustResize" />
    <activity
        android:name="com.umeng.simplify.ui.activities.NewMsgActivity"
        android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="stateHidden|adjustResize" />
    <activity
        android:name="com.umeng.simplify.ui.activities.SettingActivity"
        android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="stateHidden|adjustResize" />
    <activity
        android:name="com.umeng.simplify.ui.activities.UserInfoActivity"
        android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="stateHidden|adjustResize" />
    <activity
        android:name="com.umeng.simplify.ui.activities.TopicDetailActivity"
        android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="stateHidden|adjustResize" />
    <activity
        android:name="com.umeng.simplify.ui.activities.PostFeedActivity"
        android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="stateHidden|adjustResize" />
    <activity
        android:name="com.umeng.simplify.ui.activities.LoginSimplifyActivity"
        android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="stateHidden|adjustNothing" />
    <activity
        android:name="com.umeng.simplify.ui.activities.RegisterActivity"
        android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="stateHidden|adjustNothing" />
    <activity
        android:name="com.umeng.simplify.ui.activities.FeedsActivity"
        android:alwaysRetainTaskState="true"
        android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="stateHidden|adjustResize" />

    <activity
        android:name="com.umeng.common.ui.activities.BrowserActivity"
        android:configChanges="keyboardHidden|orientation|screenSize" />

友盟App Key

在AndroidManifest.xml中设置友盟Appkey和AppSecret。

    <!-- 友盟App Key, 必须替换为您在友盟官网上申请到的. -->
<meta-data
    android:name="UMENG_APPKEY"
    android:value="4eaee02c527015373b000003" >
</meta-data>
    <!-- 友盟的App secret -->
<meta-data
    android:name="UMENG_MESSAGE_SECRET"
    android:value="a499504e1326471ef496c4e55cac9268" >
</meta-data>

步骤3-打开微社区

简版登录设置


LoginSDKManager.getInstance().addAndUse(new LoginSimplify());

CommConfig.getConfig().setLoginResultStrategy(new LoginSuccessStrategory());

代码调用

可以通过如下代码打开微社区主页:


import com.umeng.comm.core.CommunitySDK;


    final CommunitySDK mCommSDK = CommunityFactory.getCommSDK(this);
    
    final Context context = this;
    
    Button b1 = (Button)this.findViewById(R.id.button1);
    b1.setOnClickListener(new View.OnClickListener(){
    
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            
            mCommSDK.openCommunity(context);
    
        }});

集成SDK(进阶篇)

使用FragmentActivity集成

此方式集成微社区需要注意以下几点:
1.当前的Activity需要继承FragmentActivity
2.在当前Activity的对应的XML布局文件中,需要设置LinearLayout

    <LinearLayout
        android:id="@+id/containerWsq"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"/>

集成代码:

 CommunitySDK mCommSDK = CommunityFactory.getCommSDK(this);
    mCommSDK.initSDK(this);
    CommunityMainFragment mFeedsFragment = new CommunityMainFragment();
    //设置Feed流页面的返回按钮不可见
    mFeedsFragment.setBackButtonVisibility(View.INVISIBLE);
    //添加并显示Fragment
    getSupportFragmentManager().beginTransaction().add(R.id.containerWsq, mFeedsFragment).commit();

效果图

定制登录方式

微社区中提供两种方案,供开发者选择,下面对这两种方案做详细介绍:

登录方案一(有跳转逻辑)

登录方案使用场景说明

具体那些情况需要使用此种登录方式?
1) 开发者需要自定义登录界面
2) 开发者希望使用现有微社区的登录逻辑及新手引导逻辑

跳转逻辑说明

是指在用户首次登陆成功后,SDK会打开完善用户资料和话题推荐,用户推荐的页面,而且使用此方式,可完全嵌入到SDK的业务流程中,在微社区中需要调用登录的时候,会执行这段代码。参见下图,登录成功后进入[跳转逻辑]部分。

执行逻辑流程图:
img

登录实现说明

AbsLoginImpl注入方式。首先你需要实现并继承AbsLoginImpl类,实现onLogin方法,然后将登录实现注入到SDK内部即可。可以在onLogin方法中间调用登录,也可以在该方法中打开自定义的登录界面,在自定义登录界面再调用登录方法。

注入代码案例:


    public class XXXLoginImpl extends AbsLoginImpl {
        @Override
        protected void onLogin(Context context, LoginListener listener) {
            // 注意用户id、昵称、source是必填项
            CommUser loginedUser = new CommUser("用户id"); // 用户id
            loginedUser.name = "用户昵称"; // 用户昵称
            loginedUser.source = Source.SINA;// 登录系统来源,支持当前流行的第三方平台
            
            loginedUser.gender = Gender.FEMALE;// 用户性别
            loginedUser.level = 1; // 用户等级,非必须字段
            loginedUser.score = 0;// 积分,非必须字段
            // 登录完成回调给社区SDK,200代表登录成功
            listener.onComplete(200, loginedUser);
        }
    }
    

然后实现注入登录:

// 确保不要重复注入同一类型的对象,建议放在Application类的onCreate函数执行
    LoginSDKManager.getInstance().addAndUse(new XXXLoginImpl());

注意 : 如果您需要在退出登录时处理相关逻辑,您可以覆盖onLogout方法来实现。

登录方案二(无跳转逻辑)

登录方案使用场景说明

直接调用微社区的Api接口实现微社区的登录

具体那些情况需要使用此种登录方式?
1) 开发者打开社区时就希望完成社区的用户登录,可以先调用该登录方法,返回成功后再打开微社区的界面。
2) 开发者的APP中有自己的账号系统,在APP的登录界面登录后直接调用该方法,减化APP用户的操作流程。

登录实现说明

方法1,通过第三方平台账号登录,需要设置user的source值

      //创建CommUser前必须先初始化CommunitySDK
      CommunitySDK sdk = CommunityFactory.getCommSDK(this);
      CommUser user = new CommUser();
      user.name = "UserName";
      user.id = "你的用户ID";
      user.source = Source.SINA;
      sdk.loginToUmengServer(this, user, new LoginListener() {
          @Override
          public void onStart() {

          }

          @Override
          public void onComplete(int stCode, CommUser commUser) {
              Log.d("tag", "login result is"+i);          //获取登录结果状态码
              if (ErrorCode.NO_ERROR==stCode) {
                  //登录成功,可以打开社区,也可以进行其他的操作,开发者自己定义
              }
              
         }
      });

方法2,通过开发者自有账号系统登录,无需设置user的source值

        //创建CommUser前必须先初始化CommunitySDK
        CommunitySDK sdk = CommunityFactory.getCommSDK(this);
        CommUser user = new CommUser();
        user.name = "UserName";
        user.id = "你的用户ID";
        sdk.loginToUmengServerBySelfAccount(this, user, new LoginListener() {
            @Override
            public void onStart() {

            }

            @Override
            public void onComplete(int stCode, CommUser commUser) {
                Log.d("tag", "login result is"+i);          //获取登录结果状态码
                if (ErrorCode.NO_ERROR==stCode) {
                  //登录成功,可以打开社区,也可以进行其他的操作,开发者自己定义
              }                
           }
        });

其他说明

混淆配置

如果您的App开启了混淆,那么您需要在您的混淆配置文件中添加如下配置:

-dontusemixedcaseclassnames
-dontshrink
-dontoptimize
-dontpreverify
-dontwarn com.umeng.comm.**
-dontwarn com.umeng.comm.**
-dontwarn com.google.android.maps.**
-dontwarn android.webkit.WebView
-keep class  activeandroid.** {*;}
-keep class com.umeng.** {*;}
-keep class android.** {*;}
-keepattributes *Annotation*


-ignorewarnings
-keep class org.apache.http.** {*;}
-dontwarn  org.apache.http.**
-keep class org.apache.http.* {*;}
-dontwarn  org.apache.http.*

-keep public class com.umeng.community.example.R$*{
    *;
}

-keep class android.support.v4.** {*;}
-dontwarn android.webkit.WebView

-keepattributes Exceptions,InnerClasses,Signature
-keepattributes SourceFile,LineNumberTable
-keep public class javax.**
-keep public class android.webkit.**


微社区使用的策略

在使用微社区的过程中,可能涉及到反射、依赖注入、MVP模式等概念,请参考以下文章:
Java反射
依赖注入
android MVP模式