概述
关系链模块是MSDK提供的,以手Q、微信的好友关系为基础的信息查询服务,关系链模块提供以下功能场景:
显示详情接入向导
1 前置条件
1)您已经按初始化模块说明完成 初始化。
2)确认用户已经完成手Q/微信授权登录
2 参考Demo示例
1)手Q个人信息示例参考 MSDKDemo/LoginSucceedVC.mm 文件的 onClickPersonalInfo 方法。
2)手Q好友示例参考 MSDKDemo/LoginSucceedVC.mm 文件的 onClickGoodFriendsInfo 方法。
3)微信个人信息示例参考 MSDKDemo/LoginSucceedVC.mm 文件的 onClickPersonalInfo 方法。
4)微信好友示例参考 MSDKDemo/LoginSucceedVC.mm 文件的 onClickGoodFriendsInfo 方法。
查询个人信息
概述
1)手Q用户(WGQueryQQMyInfo) 用户通过手Q授权后, 游戏需要用户昵称, 头像等其他信息,可调用 WGQueryQQMyInfo ,个人信息包含: 昵称(nickname)、OpenId(openId)、头像小图(pictureSmall)、头像中图(pictureMiddle)、头像大图(pictureLarge).
2)微信用户(WGQueryWXMyInfo) 用户通过微信授权后, 游戏需要用户昵称, 头像等其他信息,可调用 WGQueryWXMyInfo ,个人信息包含: 昵称(nickname)、OpenId( openId)、头像小图(pictureSmall)、头像中图(pictureMiddle)、头像大图(pictureLarge).
3)Apple用户(WGQueryAppleMyInfo) 用户通过Apple授权后, 游戏需要邮箱,昵称等其他信息,可调用 WGQueryAppleMyInfo ,个人信息包含: 邮箱(apple_email), 名字前缀,头衔、敬称(apple_namePrefix),名字(apple_givenName),中间名(apple_middleName),姓(apple_familyName),名字后缀,学位、荣誉(apple_nameSuffix),昵称(apple_nickname), 其他字段为空。3.3.12版本开始新增Apple渠道。如中文名:张三,一般返回:apple_familyName = 张、apple_givenName = 三。
注册回调
1)功能描述
为接收msdk的关系链回调,游戏需要注册回调函数进行处理。注册回调需要实现 WGPlatformObserver 类的 OnRelationNotify 虚方法。
2)接口声明
void OnRelationNotify(RelationRet& relationRet)
3)参数说明
返回值名称 | 类型 | 说明 |
---|---|---|
relationRet | RelationRet类 | 关系链信息结构体 |
4)返回值
无
5)示例代码
void MyObserver::OnRelationNotify(RelationRet &relationRet)
{
NSLog(@"relation callback");
NSLog(@"count == %lu",relationRet.persons.size());
NSMutableArray *personInfoArr = [NSMutableArray new];
for (int i = 0; i < relationRet.persons.size(); i++)
{
PersonInfo logInfo = relationRet.persons[i];
NSMutableDictionary *personInfoDict = [NSMutableDictionary new];
NSString *nickName = [NSString stringWithCString:(const char*)logInfo.nickName.c_str() encoding:NSUTF8StringEncoding];
NSString *openID = [NSString stringWithCString:(const char*)logInfo.openId.c_str() encoding:NSUTF8StringEncoding];
NSString *pictureSmall = [NSString stringWithCString:(const char*)logInfo.pictureSmall.c_str() encoding:NSUTF8StringEncoding];
NSString *pictureMiddle = [NSString stringWithCString:(const char*)logInfo.pictureMiddle.c_str() encoding:NSUTF8StringEncoding];
NSString *pictureLarge = [NSString stringWithCString:(const char*)logInfo.pictureLarge.c_str() encoding:NSUTF8StringEncoding];
NSString *gpsCity = [NSString stringWithCString:(const char*)logInfo.gpsCity.c_str() encoding:NSUTF8StringEncoding];
NSString *country = [NSString stringWithCString:(const char*)logInfo.country.c_str() encoding:NSUTF8StringEncoding];
//以下为Apple 登录后获取个人信息
NSLog(@"email == %s",logInfo.apple_email.c_str());
NSLog(@"namePrefix == %s",logInfo.apple_namePrefix.c_str());
NSLog(@"givenName == %s",logInfo.apple_givenName.c_str());
NSLog(@"middleName == %s",logInfo.apple_middleName.c_str());
NSLog(@"familyName == %s",logInfo.apple_familyName.c_str());
NSLog(@"nameSuffix == %s",logInfo.apple_nameSuffix.c_str());
NSLog(@"nickname == %s",logInfo.apple_nickname.c_str());
}
}
6)特殊说明
- Apple 登录只有在第一次授权时,才有 email 和 用户名相关信息返回,第二次登录时 Apple 不提供
- 可通过 设置 - AppID、iCLoud、iTues 和 App Store - 密码和安全性 - 使用您的 AppID 的 App -删除您的游戏授权,再次登录 Apple 才会提供 email 和 用户名相关信息返回
- MSDK 会把首次登录拿到的 email 和用户名存入 UserDefault 中,游戏每次调用 WGQueryAppleMyInfo 接口会返回给游戏侧,但是如果用户删除 App 这个信息会丢失,请务必知悉
7)名词解释
无
调用接口
1)功能描述
游戏可以通过调用WGQueryQQMyInfo/WGQueryWXMyInfo 接口查询个人信息以获取:昵称(nickname)、OpenId( openId)、头像小图40x40(pictureSmall)、头像中图60x60(pictureMiddle)、头像大图100x100(pictureLarge)
WGQueryAppleMyInfo 接口查询个人信息以获取:邮箱(apple_email), 名字前缀,头衔、敬称(apple_namePrefix),名字(apple_givenName),中间名(apple_middleName),姓(apple_familyName),名字后缀,学位、荣誉(apple_nameSuffix),昵称(apple_nickname), 其他字段为空。3.3.12版本开始新增Apple渠道。如中文名:张三,一般返回:apple_familyName = 张、apple_givenName = 三。
2)接口声明
bool WGQueryQQMyInfo();
bool WGQueryWXMyInfo();
bool WGQueryAppleMyInfo();
3)参数说明
无
4)返回值
无,结果通过 OnRelationNotify 回调,设置回调参考注册回调
5)示例代码
if (self.platform == 2)//eplatform_QQ
{
WGPlatform::GetInstance()->WGQueryQQMyInfo();
}
else if (self.platform == 1)//eplatform_Weixin
{
WGPlatform::GetInstance()->WGQueryWXMyInfo();
}
6)特殊说明
- 个人信息中是没有OpenId信息,需要OpenId信息可以通过登陆模块获取票据接口
WGGetLoginRecord
获取。 查询个人信息和查询同玩好友回调可以通过eRelationRetType区分。
如果业务有修改手Q玩家头像尺寸需求,注意不要改变原链接字段拼接结构
以下为手Q平台侧玩家个人头像返回链接样式,供业务参考,以平台最终返回为准
- 正常身份:http://thirdqq.qlogo.cn/g?b=oidb&k=6AJZXGDES1gHgiaK9kbIJlA&s=100&t=1466475684
- 虚拟账号身份:http://thirdqq.qlogo.cn/qqopen/ZdvYp9s7k6o0mHZMOqNJ3Na28broRWwlTZtH7ZzuYrIibicBOy2ZNXMDlBricO1hh6G/100?v=ac9c
- 平台兜底:https://q.qlogo.cn/qqapp/1106977030/9C38601899722D920F157C8B510F3E36/100
Apple 登录后获取个人信息需要注意:
- Apple 登录只有在第一次授权时,才有 email 和 用户名相关信息返回,第二次登录时 Apple 不提供
- 可通过 设置 - AppID、iCLoud、iTues 和 App Store - 密码和安全性 - 使用您的 AppID 的 App -删除您的游戏授权,再次登录 Apple 才会提供 email 和 用户名相关信息返回
- MSDK 会把首次登录拿到的 email 和用户名存入 UserDefault 中,游戏每次调用 WGQueryAppleMyInfo 接口会返回给游戏侧,但是如果用户删除 App 这个信息会丢失,请务必知悉
7)名词解释
无
查询同玩好友信息
概述
1)手Q用户(WGQueryQQGameFriendsInfo) 用户通过手Q授权后, 可以通过WGQueryQQGameFriendsInfo拉取游戏内好友信息(例如好友高分排行). 好友的信息字段可参考个人信息字段
2)微信用户(WGQueryWXGameFriendsInfo) 用户通过微信授权后, 可以通过WGQueryWXGameFriendsInfo拉取游戏内好友信息(例如好友高分排行). 好友的信息字段可参考个人信息字段
注册回调
该接口与查询个人信息接口使用同一个回调如果已经设置了就不需要重复设置,没有设置请查看回调设置 RelationRet对象的persons属性是一个List, 其中的每个PersonInfo 对象即是好友信息, 好友信息包含: 昵称(nickname)、OpenId(openId)、头像小图40x40(pictureSmall)、头像中图60x60(pictureMiddle)、头像大图100x100(pictureLarge).
调用接口
1)功能描述
游戏可以通过调用WGQueryQQGameFriendsInfo/WGQueryWXGameFriendsInfo 接口查询玩当前游戏的好友信息以获取:昵称(nickname)、OpenId(openId)、头像小图40x40(pictureSmall)、头像中图60x60(pictureMiddle)、头像大图100x100(pictureLarge).
2)接口声明
bool WGQueryQQGameFriendsInfo();
bool WGQueryWXGameFriendsInfo();
3)参数说明
无
4)返回值
无,结果通过RelationEvent回调,设置回调参考注册回调
5)示例代码
if (self.platform == 2)//eplatform_QQ
{
WGPlatform::GetInstance()->WGQueryQQGameFriendsInfo();
}
else if (self.platform == 1)//eplatform_Weixin
{
WGPlatform::GetInstance()->WGQueryWXGameFriendsInfo();
}
6)特殊说明
1)为了避免当获取个人信息(比如头像、名字)、 好友信息(比如头像、名字)失败时,导致游戏登入失败,请将查询个人信息、查询好友信息设置为非关键路径。
2)手Q、微信查询同玩好友的结果包含自己的信息。
3)V3.3.21 版本开始新增关系链回调接口中用户未授权错误码;若用户未授权关系链权限,则在回调接口OnRelationNotify
中,relationRet.flag = eFlag_UnPermission(-9)。
4)V3.3.28 版本开始 WGQueryWXGameFriendsInfo 接口新增返回 friendRemark(备注名) 字段。
注意:MSDK V3 联调环境、正式环境默认兼容老方案(nickName 优先使用微信好友备注,不返回 friendRemark 字段),如果业务侧需要切换使用新方案(nickName 对应微信昵称,friendRemark 对应微信好友备注),需要联系 MSDK 侧对业务进行配置更新启用新方案。
7)名词解释
同玩好友:玩当前游戏的好友玩家
非关键路径:是指不影响游戏登录过程的一种说法;msdk将手Q\微信的登录过程定义为关键路径,登录过程一旦被打断将对游戏的正常进行造成严重影响。
添加QQ好友
概述
玩家可以在游戏中直接添加(拉起手Q)游戏玩家为QQ好友(多次点击不会发送多条添加QQ申请)。
注册回调
添加成功或失败都会通过OnShareNotify(ShareRet ret)回调给游戏。ret.flag表示不同的分享结果,具体见eFlag.
调用接口
1)功能描述
玩家可以在游戏中直接添加(拉起手Q)游戏玩家为QQ好友。
2)接口声明
void WGAddGameFriendToQQ(unsigned char* cFopenid, unsigned char* cDesc, unsigned char* cMessage)
3)参数说明
参数名称 | 类型 | 说明 |
---|---|---|
cFopenid | unsigned char* | 要添加好友的openid |
cDesc | unsigned char* | 要添加好友的备注信息 |
cMessage | unsigned char* | 添加好友时发送的验证信息 |
4)返回值
无
5)示例代码
WGPlatform::GetInstance()->WGAddGameFriendToQQ((unsigned char*)"C1BF66286792F24E166C9A5D27CFB519",
(unsigned char*)"测试加好友",
(unsigned char*)"你好吗~");
6)特殊说明
无
7)名称解释
无
常见问题
1.如何区分个人信息和同玩好友信息
注意:2.18.0i以上版本查询个人信息和查询同玩好友回调可以通过RelationRet的type字段来区分
1)OnRelationNotify回调RelationRet里面的persons列表元素大于一个的一定是同玩好友信息
2)在个人信息和同玩好友信息只有一个的情况下我们怎么样去区分呢?
1.获取OnRelationNotify回调的openId
我们可以根据RelationRet里面的persons列表的第一个元素PersonInfo的openId。
2.获取当前登陆用户的openId
我们可以通过获取本地票据的方式获取到openId,游戏也可以用自己的方式获取
3.比较openId
相同:个人信息
不同:同玩好友信息
2.修改微信头像,好友等信息多久会生效
微信平台考虑游戏头像不需要实时更新。微信头像更新时,微信平台会将更新的头像存在DB中进行Cache,一段时间后再同步到游戏中。根据微信平台的策略,同步更新时间最短为4小时,最长为48小时。微信好友其他信息变动也一样。
手Q好友信息变动,一般在1小时左右即可完成同步。