差别
这里会显示出您选择的修订版和当前版本之间的差别。
后一修订版 | 前一修订版 | ||
im:android:basics:redpacket [2018/09/14 10:06] haozki 创建 |
im:android:basics:redpacket [2020/07/21 10:54] allenwang 移除 |
||
---|---|---|---|
行 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> | ||
+ | |||
+ | | ||
+ | |||