友盟微社区2.1版本的接入

应老大的要求,我开始正式接入友盟的微社区,从微社区的内测版1.2版本到现在的上线版2.1版本,我都几乎全程参与了,在这其中也遇到了很多问题,比如自己的账号系统和微社区中的第三方登录的账户系统整合、微信登陆爆机、账号注销不成功等等……现在使用2.1版本的微社区SDK已经可以基本实现社区的功能了。下面我来分享下自己是如何接入的:

1、微信登陆爆机或者不成功

官网上有的Mainfest文件中的权限、Activity、Service等组件的添加,这些就不在这里介绍了,请参考官网给出的文档:http://dev.umeng.com/wsq/android/quick-integration

        在这里需要注意下,可能你的微信登陆不成功或者爆机,很可能原因就是Mainfest文件中的:

        

<!-- 微信登录 -->
<activity    android:name=".wxapi.WXEntryActivity"    
android:configChanges="keyboardHidden|orientation|screenSize"    
android:exported="true"    
android:screenOrientation="portrait"    
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
这里注意这段代码不能修改,即使修改的和这样的一样也不行(至于原因我也不是很清楚)。。。

如图所示,微信的回调类要对应在包名.wxapi 类中。

当然,微信登陆成功的前提是你获得了微信登陆权限……这里就不多说了

记得在使用时将你的微信appKey和values填入:

 protected void useSocialLogin() {

        String wxappId = "xxxxxxxxxxxxxxxxx";
        String wxappSecret = "xxxxxxxxxxxxxxxxxxxxxxxx";
        new UMWXHandler(getApplicationContext(), wxappId,
                wxappSecret).addToSocialSDK();
    }


下面,我们来看看接入微社区的代码吧:

2、使用自己的账号系统来接入微社区,实现登陆时跳转到自己的登陆页面


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

CustomLoginImpl是自定义实现登录系统,实现Loginable中的三个方法。

SDK内部在登录时会调用login函数,如果你的登录界面是Activity, 那么需要自己将LoginListener传递给你的登录Activity并且最后将结果回调给微社区SDK,登录成功那么返回码为200,否则视为登录失败。 

  另外需要注意的是是否登录的标识应该存储到本地,而不应该存储在内存中。如果存储在内存中,那么下次重新进入应用是 isLogin被置为false,造成重复登录。

public class CustomLoginImpl implements Loginable {
    // !不要使用成员变量存储是否登录的状态,应该保存在本地
    private boolean isLogin = false;

    @Override
    public void login(Context context, final LoginListener listener) {
        // 跳转到你的Activity
        if (!MC.pref.getBooleanShareData("isLogin", false))
        {
            // 包装一下Listener
       CustonLoginActivitysLoginListener = new LoginListener() {

            @Override
            public void onStart() {
                listener.onStart();
            }

            @Override
            public void onComplete(int stCode, CommUser userInfo) {
                if (stCode == 200) {
                    isLogin = true;
                }
                setUmengPush(userInfo);
                listener.onComplete(stCode, userInfo);
            }
        };

            Intent intent = new Intent(context,CustonLoginActivity.class);
            intent.putExtra("isOpenLoginView", true);
            context.startActivity(intent);
        } else
        {
            String userInfo = MC.pref.getStringShareData("user", true);
            JSONObject testData = null;
            try
            {
                testData = new JSONObject(userInfo);
            } catch (JSONException e)
            {
                e.printStackTrace();
            }
            UserNode userNode = new UserNode(testData);
            // 注意用户id、昵称、source是必填项
            CommUser user = new CommUser(Logic.UID);
            user.id = Logic.UID;
            // 登录的来源.可使用值参考文档中SOURCE的取值说明
            user.source = Source.SELF_ACCOUNT;
            user.name = userNode.getNickName();
            user.customField = userNode.getEmail();
            RL.d("--->", "信息--id==" + user.id + "--source==" + user.source + "--name==" + user.name);
            // 如果没有头像地址,可不传递
            user.iconUrl = ServerCfg.IMAGE_PREFIX + userNode.getUserIcon();
            isLogin = true;
            setUmengPush(user);
            listener.onComplete(200, user);
        }
    }

    @Override
    public void logout(Context context, LoginListener listener) {
        Log.d("", "### 注销登录 ");
        MC.pref.storeBooleanShareData("isLogin", false);
        MC.pref.storeShareData("user", new UserNode().toJSONObject().toString().getBytes());
        //置空微社区的账号
        cleanUmCommUser();
        isLogin = false;
        listener.onComplete(200, null);
    }

    @Override
    public boolean isLogined(Context context) {
        Log.d("", "### 这里需要将是否已经登录的状态存到本地,避免下次重新进入应用是 isLogin被置为false");
        if (MC.pref.getBooleanShareData("isLogin", false))
            isLogin = true;
        else isLogin = false;
        return isLogin;
    }

    /**
     * 设置微社区的推送功能功能
     * 
     * @param user
     */
    private void setUmengPush(CommUser user)
    {
        UmengPushImpl umengPushImpl = new UmengPushImpl();
        umengPushImpl.enable(MC.application);
        umengPushImpl.setUserAlias(user);
        PushSDKManager.getInstance().addAndUse(umengPushImpl);
    }

    /**
     * 清空友盟微社区的用户信息
     */
    private void cleanUmCommUser()
    {
        // 清空SDK内部保存的用户信息
        CommonUtils.logout();
        // 置空用户信息
        CommConfig.getConfig().loginedUser = new CommUser();
    }

}

CustonLoginActivity就是你的登陆页面对应的Activity,在登陆成功销毁这个Activity时,把用户信息回调给社区SDK:
 /**
     * 模拟用户登录操作,自定义过程中用户可以构造用户名、密码输入界面
     */
    private void mockLoginData() {
        Log.d("", "### 使用自己的账户系统登录,然后将标识用户唯一性的id和source传递给社区SDK ");
        Random random = new Random();
        CommUser loginedUser = new CommUser();
        String userId = "id" + random.nextInt(Integer.MAX_VALUE);
        loginedUser.id = userId; // 用户id
        loginedUser.name = "name" + random.nextInt(Integer.MAX_VALUE); // 用户名
        loginedUser.source = Source.SELF_ACCOUNT;// 登录系统来源
        loginedUser.gender = Gender.FEMALE;// 用户性别
        loginedUser.level = random.nextInt(100); // 用户等级
        loginedUser.score = random.nextInt(100);// 积分
        
        if (sLoginListener != null) {
            // 登录完成回调给社区SDK,200代表登录成功
            sLoginListener.onComplete(200, loginedUser);
        }
    }
这样就可以使用自己的登陆页面来登陆进入微社区啦,快来试试吧~

3、使用微社区登陆账号注销不了(切换为别的账号后,仍然是第一次登陆的账号)

这里需要在退出登陆的时候,置空微社区中的账号,代码如下:

        // 清空SDK内部保存的用户信息
        CommonUtils.logout();
        // 置空用户信息
        CommConfig.getConfig().loginedUser = new CommUser();









UniApp接入友盟推送(UMeng Push)的步骤如下: 1. **初始化配置**: 首先,在项目中引入友盟的SDK。在`main.js`或全局配置文件中,添加友盟推送的配置,包括APPID和服务器URL。 ```javascript import { uniPush } from '@dcloudio/uni-push' uniPush.init({ appKey: 'YOUR_APP_KEY', // 替换为你的友盟AppKey channel: '', // 渠道标识,可选 onNotification: function (notification) {}, // 接收通知回调 openMiniProgram: false, // 是否打开小程序通知,默认false }) ``` 2. **注册设备**: 在用户登录后,需要获取并注册用户的设备标识以便接收推送消息。 ```javascript uniPush.registerDevice(function(res) { console.log('设备注册成功,token:', res.data.token) }, function(err) { console.error('设备注册失败:', err) }) ``` 3. **设置推送通知**: 友盟提供了丰富的通知设置,包括通知类型、标题、内容等,可以通过`setNotificationConfig`方法进行配置。 4. **发送推送**: 当需要向特定用户或者所有用户发送推送时,调用`sendNotification`方法,传入接收者列表和消息内容。 5. **监听事件**: 可以监听友盟推送的事件,如打开通知、点击通知等,通过`addEventListener`方法。 ```javascript uniPush.addEventListener('registrationSuccess', function (event) { console.log('注册成功', event.detail) }) ``` 6. **测试推送**: 在友盟后台创建测试推送,确保在模拟器或真机上正确显示和接收。 **相关问题--:** 1. 如何在UniApp中关闭友盟推送? 2. 如何查看友盟推送的统计分析? 3. 推送通知失败如何处理错误信息?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值