差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

后一修订版 两侧同时换到之后的修订记录
im:android:basics:redpacket [2018/09/14 10:06]
haozki 创建
im:android:basics:redpacket [2018/09/14 10:10]
haozki
行 1: 行 1:
-====== 环信红包接入文档(iOS) =======+====== 环信红包接入文档 ====== 
 + 
 +----
  
 新开商户可免费发送累计5000元总额的红包,超过5000元后,红包功能自动关闭,直到商户付费购买增值服务“红包功能”后,该功能重新开启,购买增值服务请咨询环信商务经理。 新开商户可免费发送累计5000元总额的红包,超过5000元后,红包功能自动关闭,直到商户付费购买增值服务“红包功能”后,该功能重新开启,购买增值服务请咨询环信商务经理。
-===== 集成概述 ===== 
-  * 红包SDK分为两个版本,即**钱包版红包SDK**与**支付宝版红包SDK**。 
-  * 使用钱包版红包SDK的用户,可以使用银行卡支付或支付宝支付等第三方支付来发红包;收到的红包金额会进入到钱包余额,并支持提现到绑定的银行卡。 
-  * 使用支付宝版红包SDK的用户,发红包仅支持支付宝支付;收到的红包金额即时入账至绑定的支付宝账号 
-  * 请选择希望接入的版本并下载对应的SDK进行集成,钱包版红包SDK与支付宝版红包SDK集成方式相同。 
-  * 需要注意的是如果已经集成了钱包版红包SDK,暂不支持切换到支付宝版红包SDK(两个版本不支持互通)。 
-  * [[https://​github.com/​YunzhanghuOpen/​Redpacket-Demo-iOS|集成演示Demo]],开发者可以通过此Demo了解iOS红包SDK的集成,集成方式仅供参考。 
-===== 红包开源模块 ===== 
-{{:​im:​300iosclientintegration:​ios_redpacket_open.jpeg|}} 
-==== 红包开源模块介绍 ==== 
-''​RedpacketAliPay''​ 
-    * 为**支付宝版SDK**处理支付宝授权和支付宝支付回调 
  
-''​RedpacketJDPay''​  +== 集成概述 ==
-    * 为**钱包版SDK**处理支付宝支付回调+
  
-''​RedpacketCell''​ +  *    红包SDK分为两个版本,即钱包版红包SDK与支付宝版红包SDK。 
-    * 红包SDK的红包卡片样+  ​   ​使用钱包版红包SDK的用户,可以使用银行卡支付或支付宝支付等第三方支付来发红包;收到的红包金额会进入到钱包余额,并支持提现到绑定的银行。 
 +  *    使用支付宝版红包SDK的用户,发红包仅支持支付宝支付;收到的红包金额即时入账至绑定的支付宝账号。 
 +  *    请选择希望接入的版本并下载对应的SDK进行集成,钱包版红包SDK与支付宝版红包SDK集成方相同。 
 +  *    需要注意的是如果已经集成了钱包版红包SDK,暂不支持切换到支付宝版红包SDK(两个版本不支持互通)。 
 +  *    环信Demo中使用redPacketlibrary模块集成了红包SDK相关红能。 
 +  *    [https://​github.com/​easemob/​sdkdemoapp3.0_android/​tree/​sdk3.0 集成Demo]
  
-''​RedpacketCellResource.bundle''​ +== redPacketlibrary介绍 ==
-    *  红包开源部分的资源文件+
  
-''​RedpacketChatViewController''​ +  ​redPacketlibrary是在环信Demo中集成红功能的模块,开者可参考该模块中的方法集成红包功能。建议开发者以模块的形式集成红包功能,便于项目的更新维护。 
-    * 继承自''​ChatViewController''​ +=====   ​redpacketlibrary目录说明 ===== 
-    ​* 包发红包红包功能 +
-    * 单聊红包包含**小额随机红包**和**普通红包** +
-    * 群红包包含**定向红包****普通红包****拼手气红包** +
-    * 收红包可以接受各种红包类型包含**营销红包**+
  
-''​RedpacketUserConfig'' ​红包SDK初始化文件 ​      ​ +  * libs :包含了集成红包功能所依赖的jar包。(红包使用了glide库做图片加载,由于已经依赖了easeui这里不重复添加) 
-    ​* ​ 实现红包SDK注册 +  * res :包含了聊天页面中的资源文件(例如红包消息卡片,回执消息的UI等)。 
-    ​* ​ 实现当前用户获取 +  ​* utils包 : 封装了收、发红包的相关方法。 
-    ​ ​实现红包SDK初始化和红包IM消息和透传消息处理 +  * widget包:聊天界面中的红包消息、红包回执消息的ChatRow。(开发者可自定义红包消息及回执消息的UI) 
-===== Cocoapods支持 ​===== +  
-环信Demo分2个Target\\ +注意: RedPacketUtil类中使用了环信SDK中相关方法,以及红包chatrow继承自EaseChatRow,redpacketlibrary依赖了easeui,如不使用上诉相关代码可不依赖easeui。 
-{{:im:300iosclientintegration:​ios_redpacket_targets.jpeg|}}+  
 +=====  ​集成步骤 ​=====  
 +* 以支付宝版红包SDK例,修改com.hyphenate.redpacket:redpacket-alipay:1.1.2中的1.1.2为已发布的更高版本(例如1.1.3),同步之后即可完成红包SDK的更新。
  
 +==== 1.添加对红包工程的依赖 ====
  
-''​ChatDemo-UI3.0''​ 默认支持支付宝版红包SDK 
-''​ChatDemo-UI3.0-JDPay''​ 支持钱包版SDK 
  
-修改''​Podfile''​支持两个红包SDK版本+  * ChatDemo的build.gradle中
  
-<​code>​ +<​code ​java>
-target '​ChatDemo-UI3.0'​ do +
-... +
-... +
-pod '​RedpacketAliAuthLib' ​  # 支付宝版红包SDK+
  
-end +    //​添加远程仓库地址 
- +    ​allprojects { 
-target '​ChatDemo-UI3.0-JDPay'​ do +        ​repositories { 
-... +            ​jcenter() 
-...    +            maven {  url "​https://​raw.githubusercontent.com/​HyphenateInc/​Hyphenate-SDK-Android/​master/​repository"​ } 
-    ​pod '​RedpacketLib'​ # 钱包版红包SDK+        } 
 +    ​}
  
-end+     ​dependencies { 
 +        compile project(':​redpacketlibrary'​) 
 +        compile project(':​EaseUI'​) 
 +        compile fileTree(dir:​ '​libs',​ include: '​*.jar',​ exclude: '​android-support-multidex.jar'​) 
 +     } 
 + 
 </​code>​ </​code>​
-===== 红包功能开关 =====+  
 +  * ChatDemo的setting.gradle中 
 +  
 +<code java>
  
-''​ChatDemo-UI3.0-Prefix.pch''​文件中有如下宏定义, 注销掉此宏定义则可以关闭红包功能。+      include ​':EaseUI'':​redpacketlibrary'
  
-<code objc> 
-#define REDPACKET_AVALABLE 
 </​code>​ </​code>​
  
-===== 集成准备 =====+==== 2.ChatDemo清单文件中注册红包相关组件 ​====
  
-==== 导入SDK ====+<code java>
  
-=== 导入开源模块 === +    <​uses-sdk 
-请在环信Demo中获取''​RedpacketSDK''​开源部分 +            android:​minSdkVersion="​9"​ 
-在工程中导入''​RedpacketSDK''​开源模块+            android:​targetSdkVersion="​19"​ 
 +            tools:​overrideLibrary="​com.easemob.redpacketui"​ 
 +        /> 
 +         
 +    <​!--支付宝版 start-->
  
-=== 通过Pod更新红包SDK === +<​!--发红包页面-->​ 
-修改Podfile,如果是支付宝版SDK则加入**pod '​RedpacketAliAuthLib'​** +<​activity 
-如果是钱包版SDK则加入**pod '​RedpacketLib'​**+   ​android:​name="​com.easemob.redpacketui.ui.activity.RPRedPacketActivity"​ 
 +   ​android:​screenOrientation="​portrait"​ 
 +   ​android:​windowSoftInputMode="​adjustPan|stateVisible"/>​ 
 +<!--红包详情页面-->​ 
 +<​activity 
 +   ​android:​name="​com.easemob.redpacketui.ui.activity.RPDetailActivity"​ 
 +   ​android:​screenOrientation="​portrait"​ 
 +   ​android:​windowSoftInputMode="​adjustPan"/>​ 
 +<​!--红包记录页面-->​ 
 +<​activity 
 +   ​android:​name="​com.easemob.redpacketui.ui.activity.RPRecordActivity"​ 
 +   ​android:​screenOrientation="​portrait"​ 
 +   ​android:​windowSoftInputMode="​adjustPan"/>​ 
 +<​!--群成员列表页面-->​ 
 +<​activity 
 +   ​android:​name="​com.easemob.redpacketui.ui.activity.RPGroupMemberActivity"​ 
 +   ​android:​screenOrientation="​portrait"​ 
 +   ​android:​windowSoftInputMode="​adjustPan|stateHidden"/>​ 
 +<!--支付宝H5支付页面-->​ 
 +<​activity 
 +   ​android:​name="​com.alipay.sdk.app.H5PayActivity"​ 
 +   ​android:​configChanges="​orientation|keyboardHidden|navigation|screenSize"​ 
 +   ​android:​exported="​false"​ 
 +   ​android:​screenOrientation="​behind"​ 
 +   ​android:​windowSoftInputMode="​adjustResize|stateHidden"​ /> 
 +<​!--支付宝H5授权页面-->​ 
 +<​activity 
 +   ​android:​name="​com.alipay.sdk.app.H5AuthActivity"​ 
 +   ​android:​configChanges="​orientation|keyboardHidden|navigation|screenSize"​ 
 +   ​android:​exported="​false"​ 
 +   ​android:​screenOrientation="​behind"​ 
 +   ​android:​windowSoftInputMode="​adjustResize|stateHidden"/>​
  
-==== 通过环信APPKey配置商户信息 ====+<​!--支付宝版 end-->
  
-修改文件''​Appdelegate.m''​+<​!--钱包版需在此基础上额外添加以下activity的声明-->​
  
-<code objc+<!--WebView相关页面--  
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +<​activity 
-... +  android:​name="​com.easemob.redpacketui.ui.activity.RPWebViewActivity"​ 
-...+  android:​screenOrientation="​portrait"​ 
 +  android:​windowSoftInputMode="​adjustResize|stateHidden"​ /> 
 +<!--零钱页面-->​     
 +<​activity 
 +  android:name="​com.easemob.redpacketui.ui.activity.RPChangeActivity"​ 
 +  android:configChanges="​orientation|keyboardHidden|screenSize"​ 
 +  ​android:​screenOrientation="​portrait"​ 
 +  android:​windowSoftInputMode="​adjustResize|stateHidden"​ /> 
 +<​!--银行卡页面-->​     
 +<​activity 
 +  android:​name="​com.easemob.redpacketui.ui.activity.RPBankCardActivity"​ 
 +  ​android:​screenOrientation="​portrait"​ 
 +  android:​windowSoftInputMode="​adjustPan|stateHidden"​ /> 
 +<​!--转账页面-->​   
 +<​activity 
 +  android:​name="​com.easemob.redpacketui.ui.activity.RPTransferActivity"​ 
 +  android:​screenOrientation="​portrait"​ 
 +  android:​windowSoftInputMode="​adjustPan|stateVisible"/>​ 
 +<​!--转账详情页面-->​           
 +<​activity 
 +  android:​name="​com.easemob.redpacketui.ui.activity.RPTransferDetailActivity"​ 
 +  android:​screenOrientation="​portrait"​ 
 +  android:​windowSoftInputMode="​adjustPan|stateHidden"/>​
  
-#ifdef REDPACKET_AVALABLE +<!-- 配置权限 --> 
-    /** +<​uses-permission android:​name="​android.permission.INTERNET"​/> 
-     *  TODO通过环信的AppKey注册红包 +<​uses-permission android:name="​android.permission.ACCESS_NETWORK_STATE"/>​ 
-     *+<​uses-permission android:​name="​android.permission.READ_PHONE_STATE"​/> 
-    ​[[RedPacketUserConfig sharedConfig] configWithAppKey:EaseMobAppKey];​ +<​uses-permission android:name="​android.permission.WRITE_EXTERNAL_STORAGE"/>​ 
-#endif+<​uses-permission android:​name="​android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>​ 
 +<!-- 钱包版需额外添加如下权限,支付宝版不需要该权限 --> 
 +<​uses-permission android:​name="​android.permission.CAMERA"/> ​  
 + </​code>​ 
 +  
 + ==== 3.DemoApplication初始化红包上下文 ==== 
 +<code java> ​
  
-... +    @Override 
-...+public void onCreate() { 
 +    super.onCreate();​ 
 +    //​初始化红包SDK,开启日志输出开关 
 +    RedPacket.getInstance().initRedPacket(applicationContext,​ RPConstant.AUTH_METHOD_EASEMOB,​ new RPInitRedPacketCallback() { 
 +        ​@Override 
 +     public void initTokenData(RPValueCallback<​TokenData>​ callback) { 
 +     TokenData tokenData = new TokenData();​ 
 +     tokenData.imUserId = EMClient.getInstance().getCurrentUser();​ 
 + //​此处使用环信id代替了appUserId 开发者可传入App的appUserId 
 + tokenData.appUserId = EMClient.getInstance().getCurrentUser();​ 
 + tokenData.imToken = EMClient.getInstance().getAccessToken();​ 
 + //​同步或异步获取TokenData 获取成功后回调onSuccess()方法 
 + callback.onSuccess(tokenData);​ 
 +
 + @Override 
 + public RedPacketInfo initCurrentUserSync() { 
 + //​这里需要同步设置当前用户id、昵称和头像url 
 + String fromAvatarUrl = "";​ 
 + String fromNickname = EMClient.getInstance().getCurrentUser();​ 
 + EaseUser easeUser = EaseUserUtils.getUserInfo(fromNickname);​ 
 + if (easeUser != null) { 
 + fromAvatarUrl = TextUtils.isEmpty(easeUser.getAvatar()) ? "​none"​ : easeUser.getAvatar();​ 
 + fromNickname = TextUtils.isEmpty(easeUser.getNick()) ? easeUser.getUsername() : easeUser.getNick();​ 
 +
 + RedPacketInfo redPacketInfo = new RedPacketInfo();​ 
 + redPacketInfo.fromUserId = EMClient.getInstance().getCurrentUser();​ 
 + redPacketInfo.fromAvatarUrl = fromAvatarUrl;​ 
 + redPacketInfo.fromNickName = fromNickname;​ 
 + return redPacketInfo;​ 
 +
 + }); 
 +    //​打开Log开关 正式发布时请关闭 
 +    RedPacket.getInstance().setDebugMode(true);​ 
 +
 +    ​
 </​code>​ </​code>​
  
-===== 聊天页面实现发红包 ====+==== 4. 发红包 ====
-用带有收发红包功能的''​RedPacketChatViewController''​替换EaseUI的''​ChatViewController''​+
  
-===== 零钱页(钱包版SDK)或者红包记录(支付宝版SDK)===== +=== 进入发红包页面 ===
-支付宝版为红包记录 +
-钱包版为零钱页 +
-在''​SettingsViewController.m''​中增加此功能+
  
-<​code ​objc+<​code ​java>@Override 
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:​(NSIndexPath *)indexPath +public boolean onExtendMenuItemClick(int itemId, View view
-+        switch ​(itemId) { 
-... +        ... 
-... +        case ITEM_RED_PACKET://​进入红包页面 
-#ifdef REDPACKET_AVALABLE +            //​注意:不再支持原有的startActivityForResult进入红包相关页面 
-    if (indexPath.section ​== 0) { +            int itemType; 
-        cell.textLabel.text = @"​零钱"​+            if (chatType ​== EaseConstant.CHATTYPE_SINGLE) { 
-#ifdef AliAuthPay +                ​itemType = RPConstant.RP_ITEM_TYPE_SINGLE;​ 
-        cell.textLabel.text = @"​红包记录"​+                //​小额随机红包 
-#endif +                //itemType = RPConstant.RP_ITEM_TYPE_RANDOM
-    }else if (indexPath.section == 1) { +            } else { 
-#else +                ​itemType = RPConstant.RP_ITEM_TYPE_GROUP
-    ​if ​(indexPath.section == 0) { +            } 
-#endif +            ​RedPacketUtil.startRedPacket(getActivity(),​ itemType, toChatUsername,​ new RPSendPacketCallback() { 
-... +               @Override 
-... +                ​public void onGenerateRedPacketId(String redPacketId) {
-}+
  
-- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:​(NSIndexPath *)indexPath +                } 
-+                @Override 
-    ​[tableView deselectRowAtIndexPath:​indexPath animated:​YES];​ +                public ​void onSendPacketSuccess(RedPacketInfo redPacketInfo
-#ifdef REDPACKET_AVALABLE +                    //​发送红包消息到聊天页面 
-    ​if ​(indexPath.section ​== 0) { +                    sendMessage(RedPacketUtil.createRPMessage(getActivity(), redPacketInfo,​ toChatUsername));​ 
-        /** 如果是钱包版SDK则是零钱页,如果是支付宝版SDK则是红包记录页*/ +                } 
-        ​[RedpacketViewControl presentChangePocketViewControllerFromeController:self]+            }); 
-        ​return;+            break; 
 +        } 
 +        //​不覆盖已有的点击事件 
 +        return false; 
 +}        </​code>​ 
 + 
 +=== 进入转账页面(仅支持钱包版=== 
 + 
 +<code java>​RedPacketUtil.startRedPacket(getActivity(),​ RPConstant.RP_ITEM_TYPE_TRANSFER,​ toChatUsername,​ new RPSendPacketCallback() ​
 +                ​@Override 
 +                ​public void onGenerateRedPacketId(String redPacketId) { 
 + 
 +                } 
 +                @Override 
 +                public void onSendPacketSuccess(RedPacketInfo redPacketInfo) { 
 +                    sendMessage(RedPacketUtil.createTRMessage(getActivity(),​ redPacketInfo,​ toChatUsername));​ 
 +                } 
 +});</​code>​ 
 + 
 +==== 5.拆红包 ==== 
 + 
 +=== 拆单聊、群聊、小额随机红包的方法 === 
 + 
 +调用示例 
 + 
 +<code java>​@Override 
 +public boolean onMessageBubbleClick(EMMessage message) { 
 +   ​//​消息框点击事件,demo这里不做覆盖,如需覆盖,return true 
 +   if (message.getBooleanAttribute(RPConstant.MESSAGE_ATTR_IS_RED_PACKET_MESSAGE,​ false)){ 
 +        RedPacketUtil.openRedPacket(getActivity(),​ chatType, message, toChatUsername,​ messageList);​ 
 +       ​return true; 
 +   } 
 +   ​return false; 
 +}</​code>​ 
 + 
 +=== 拆转账红包方法(仅支持钱包版) === 
 + 
 +'''​RPRedPacketUtil.getInstance().openTransferPacket(context,​ redPacketInfo)'''​ 
 + 
 +redPacketInfo传入参数 
 + 
 +  ​redPacketAmount  ​   转账金额 
 +  * transferTime  ​   转账时间 
 +  * messageDirect  ​   消息的方向 
 + 
 +调用示例 
 + 
 +<code java>​RPRedPacketUtil.getInstance().openTransferPacket(context,​ redPacketInfo)<​/code> 
 + 
 +==== 6.群红包领取回执消息的处理 ==== 
 + 
 +=== ChatFragment中的处理 === 
 + 
 +<code java>​@Override 
 +public void onCmdMessageReceived(List<​EMMessage>​ messages) { 
 +    for (EMMessage message ​messages) { 
 +        EMCmdMessageBody cmdMsgBody = (EMCmdMessageBody) message.getBody()
 +        ​String action = cmdMsgBody.action();//​获取自定义action 
 +        if (action.equals(RPConstant.REFRESH_GROUP_RED_PACKET_ACTION)){ 
 +            RedPacketUtils.receiveRedPacketAckMessage(message);​ 
 +            messageList.refresh();​ 
 +        }
     }     }
-#endif +    super.onCmdMessageReceived(messages);​ 
-... +}</​code>​ 
-..+=== MainActivity中的处理 ===
-</​code>​+
  
-==== 消息处理 ====+<code java>​@Override 
 +public void onCmdMessageReceived(List<​EMMessage>​ messages) { 
 +    for (EMMessage message : messages) { 
 +        EMCmdMessageBody cmdMsgBody ​(EMCmdMessageBody) message.getBody();​ 
 +        String action ​cmdMsgBody.action();//​获取自定义action 
 +        if (action.equals(RPConstant.REFRESH_GROUP_RED_PACKET_ACTION) ){ 
 +            RedPacketUtils.receiveRedPacketAckMessage(message);​ 
 +        } 
 +    } 
 +    refreshUIWithMessage();​ 
 +}</​code>​
  
-修改文件''​ChatDemoHelper.m''​+=== 全局处理 ===
  
-=== 监听消息 ===+* DemoHelper中
  
-<​code ​objc+<​code ​java>@Override 
-(void)initHelper +public void onCmdMessageReceived(List<​EMMessage>​ messages) { 
-+    for (EMMessage message : messages) { 
-#ifdef REDPACKET_AVALABLE +        //​获取消息body 
-    ​[[RedPacketUserConfig sharedConfig] beginObserveMessage]+        EMCmdMessageBody cmdMsgBody = (EMCmdMessageBody) message.getBody();​ 
-#endif +        final String action = cmdMsgBody.action();//​获取自定义action 
-... +        if(!easeUI.hasForegroundActivies()){ 
-...+            if (action.equals(RPConstant.REFRESH_GROUP_RED_PACKET_ACTION)){ 
 +                RedPacketUtils.receiveRedPacketAckMessage(message);​ 
 +                broadcastManager.sendBroadcast(new Intent(RPConstant.REFRESH_GROUP_RED_PACKET_ACTION));​ 
 +            } 
 +        } 
 +    } 
 +}</​code>​ 
 +* MainActivity中 
 + 
 +<code java>​private ​void registerBroadcastReceiver({ 
 +    ​broadcastManager = LocalBroadcastManager.getInstance(this);​ 
 +    IntentFilter intentFilter = new IntentFilter();​ 
 +    intentFilter.addAction(Constant.ACTION_CONTACT_CHANAGED);​ 
 +    intentFilter.addAction(Constant.ACTION_GROUP_CHANAGED);​ 
 +    intentFilter.addAction(RPConstant.REFRESH_GROUP_RED_PACKET_ACTION);​ 
 +    broadcastReceiver = new BroadcastReceiver() ​
 +      
 +        @Override 
 +        public void onReceive(Context context, Intent intent) { 
 +        ... 
 +        if (action.equals(RPConstant.REFRESH_GROUP_RED_PACKET_ACTION)){ 
 +            if (conversationListFragment != null){ 
 +                conversationListFragment.refresh();​ 
 +                } 
 +            } 
 +        } 
 +    ​}
 +    ​broadcastManager.registerReceiver(broadcastReceiver,​ intentFilter);​ 
 +}</​code>​ 
 +* 会话列表中红包回执消息的处理 
 + 
 +<code java>​@Override 
 +protected void setUpView() { 
 +    super.setUpView();​ 
 +    ​...    ​ 
 +    //red packet code : 红包回执消息在会话列表最后一条消息的展示 
 +    conversationListView.setConversationListHelper(new EaseConversationListHelper() { 
 +        @Override 
 +        public String onSetItemSecondaryText(EMMessage lastMessage) { 
 +          if (lastMessage.getBooleanAttribute(RPConstant.MESSAGE_ATTR_IS_RED_PACKET_ACK_MESSAGE,​ false)) { 
 +                    String sendNick = lastMessage.getStringAttribute(RPConstant.EXTRA_RED_PACKET_SENDER_NAME,​ ""​);​ 
 +                    String receiveNick = lastMessage.getStringAttribute(RPConstant.EXTRA_RED_PACKET_RECEIVER_NAME,​ ""​);​ 
 +                    String msg; 
 +                    if (lastMessage.direct() == EMMessage.Direct.RECEIVE) { 
 +                        msg = String.format(getResources().getString(R.string.msg_someone_take_red_packet),​ receiveNick);​ 
 +                    } else { 
 +                        if (sendNick.equals(receiveNick)) { 
 +                            msg = getResources().getString(R.string.msg_take_red_packet);​ 
 +                        } else { 
 +                            msg = String.format(getResources().getString(R.string.msg_take_someone_red_packet),​ sendNick);​ 
 +                        } 
 +                    } 
 +                    return msg; 
 +                } 
 +                return null; 
 +            } 
 +        }); 
 +        super.setUpView();​ 
 +        //end of red packet code 
 +    }</​code>​ 
 + 
 +==== 7.屏蔽红包消息的转发和撤回功能 ==== 
 + 
 +* ContextMenuActivity的onCreate方法 
 + 
 +<code java>if (type == EMMessage.Type.TXT.ordinal()) { 
 +    if(message.getBooleanAttribute(Constant.MESSAGE_ATTR_IS_VIDEO_CALL,​ false) || 
 +       ​message.getBooleanAttribute(Constant.MESSAGE_ATTR_IS_VOICE_CALL,​ false) ||  
 +       //​屏蔽红包消息的转发功能 
 +       ​message.getBooleanAttribute(RPConstant.MESSAGE_ATTR_IS_RED_PACKET_MESSAGE,​ false)){ 
 +         ​setContentView(R.layout.em_context_menu_for_location);​ 
 +    }
 } }
-</​code>​+if (isChatroom 
 + //​屏蔽红包消息的撤回功能 
 + || message.getBooleanAttribute(RPConstant.MESSAGE_ATTR_IS_RED_PACKET_MESSAGE,​ false)) { 
 + View v = (View) findViewById(R.id.forward);​ 
 +         if (v != null) { 
 +             v.setVisibility(View.GONE);​ 
 +         } 
 + }</​code>​
  
-=== 屏闭红被抢消息的通知 ​===+==== 8.进入零钱页方法(仅支持钱版) ====
  
-<code objc> +'''​RPRedPacketUtil.getInstance().startChangeActivity(context)'''​
-#ifdef REDPACKET_AVALABLE +
-        /** +
-         ​* ​ 屏蔽红包被抢消息的提示 +
-         */ +
-        NSDictionary *dict = message.ext; +
-        needShowNotification = (dict && [dict valueForKey:​RedpacketKeyRedpacketTakenMessageSign]? NO : needShowNotification;​ +
-#endif+
  
-</​code>​+* 获取零钱余额接口(仅支持钱包版) 
 + 
 +<code java>​RPRedPacketUtil.getInstance().getChangeBalance(new RPValueCallback<​String>​() { 
 +        @Override 
 +        public void onSuccess(String changeBalance) { 
 + 
 +        } 
 + 
 +        @Override 
 +        public void onError(String errorCode, String errorMsg) { 
 + 
 +        } 
 +});</​code>​ 
 +==== 9.进入红包记录页面方法(仅支持支付宝版) ==== 
 + 
 +* RPRedPacketUtil.getInstance().startRecordActivity(context) 
 + 
 +== detachView接口 == 
 + 
 +* RPRedPacketUtil.getInstance().detachView() 
 +* 在拆红包方法所在页面销毁时调用,可防止内存泄漏。 
 +* 调用示例(以ChatFragment为例) 
 + 
 +<code java>​@Override 
 +public void onDestroy() { 
 +    super.onDestroy();​ 
 +    RPRedPacketUtil.getInstance().detachView();​ 
 +}</​code>​ 
 + 
 +==== 10.拆红包音效 ====
  
 +* 在assets目录下添加open_packet_sound.mp3或者open_packet_sound.wav文件即可(文件大小不要超过1M)。
  
  
行 176: 行 432:
 <WRAP group> <WRAP group>
 <WRAP half column> <WRAP half column>
-上一页:[[im:​300iosclientintegration:73privatecloud|私有云SDK集成配置]]+上一页:[[im:​200androidclientintegration:95privatecloud|私有云SDK集成配置]]
 </​WRAP>​ </​WRAP>​
  
 <WRAP half column> <WRAP half column>
-下一页:[[im:​300iosclientintegration:apns|APNs推送]]+下一页:[[im:​200androidclientintegration:100iosnickname|设置当前登录用户的推送昵称]]
 </​WRAP>​ </​WRAP>​
 </​WRAP>​ </​WRAP>​
 +
 +  ​
 +