[关闭]
@cybercser 2018-06-15T17:34:29.000000Z 字数 15910 阅读 87

英卓iOS SDK接入指南(版本V1.6.6)

版本变更日志

前言概述

英卓SDK集成用户登录、注册,以及支付相关功能。调用SDK登录接口完成用户登录过程;调用SDK支付接口完成支付过程,支付成功后英卓服务器把支付结果返回给游戏服务器,游戏服务器发放相应道具或虚拟货币。新版SDK支付引入平台币(EG Point),具体参考Demo。

第三方依赖

英卓SDK使用了主流的AFNetworking作为网络层,还使用了Facebook的相关FBSDKCoreKitFBSDKLoginKitFBSDKShareKitUMengAnalytics-NO-IDFA英卓SDK已经集成了以上库,若接入方也使用这些依赖包请注意去除冲突。

如果集成过程中出现如下问题,需要在Other Linker Flags里加入 -lz

  1. "_compress2", referenced from:
  2. +[UMANUtil deflatedDataPrefixedWith:level:source:] in libMobClickLibrary.a(UMANUtil.o)
  3. ld: symbol(s) not found for architecture x86_64
  4. clang: error: linker command failed with exit code 1 (use -v to see invocation)

SDK内容简介

  • 开发环境要求:
    1. Mac OS X 10.10以上版本
    2. Xcode 7.0以上版本
    3. iOS 7.0以上版本
  • 联系英卓平台部提供appidappkeyplatformid(平台id)用以识别接入的游戏。
  • SDK包含一个库文件EGKit.frameworkEGResource.bundle是EGSDK的资源文件目前只支持简体中文、繁体中文、越南语、英语、韩语。支持iOS 7.0以上系统,兼容ipad和iphone版本,支持横屏和竖屏。
  1. <key>CFBundleURLTypes</key>
  2. <array>
  3. <dict>
  4. <key>CFBundleURLSchemes</key>
  5. <array>
  6. <string>fb{您的FACEBOOK_APP_ID}</string>
  7. </array>
  8. </dict>
  9. </array>
  10. <key>FacebookAppID</key>
  11. <string>{您的FACEBOOK_APP_ID}</string>
  12. <key>FacebookDisplayName</key>
  13. <string>{您的FACEBOOK_APP_NAME}</string>
  14. <key>LSApplicationQueriesSchemes</key>
  15. <array>
  16. <string>fbauth2</string>
  17. </array>
  18. <key>NSAppTransportSecurity</key>
  19. <dict>
  20. <key>NSAllowsArbitraryLoads</key>
  21. <true/>
  22. <key>NSExceptionDomains</key>
  23. <dict>
  24. <key>akamaihd.net</key>
  25. <dict>
  26. <key>NSExceptionRequiresForwardSecrecy</key>
  27. <false/>
  28. <key>NSIncludesSubdomains</key>
  29. <true/>
  30. </dict>
  31. <key>facebook.com</key>
  32. <dict>
  33. <key>NSExceptionRequiresForwardSecrecy</key>
  34. <false/>
  35. <key>NSIncludesSubdomains</key>
  36. <true/>
  37. </dict>
  38. <key>fbcdn.net</key>
  39. <dict>
  40. <key>NSExceptionRequiresForwardSecrecy</key>
  41. <false/>
  42. <key>NSIncludesSubdomains</key>
  43. <true/>
  44. </dict>
  45. </dict>
  46. </dict>

接口介绍

错误码

  1. /**
  2. *
  3. * 错误码
  4. */
  5. typedef NS_ENUM(NSInteger, EG_CODE) {
  6. /**
  7. *
  8. * 成功
  9. */
  10. EG_CODE_SUCCESS = 0,
  11. /**
  12. *
  13. * 取消
  14. */
  15. EG_CODE_CANCEL = 1,
  16. /**
  17. *
  18. * 失败
  19. */
  20. EG_CODE_FAIL = 2,
  21. /**
  22. *
  23. * 未登录
  24. */
  25. EG_CODE_LOGOUT = 3,
  26. };

通知类型

  1. /**
  2. *
  3. * 弹框隐藏通知
  4. */
  5. UIKIT_EXTERN NSString *const EGPopupViewHiddenNotification;

1、获取SDK版本号

  1. /**
  2. * 获取SDK版本号
  3. */
  4. + (NSString *)EGKitVersion;

2、初始化

  1. /**
  2. *
  3. * 初始化SDK
  4. *
  5. * @param appId 游戏申请到的appid
  6. * @param appKey 游戏申请到的appkey
  7. * @param channelId 游戏发行渠道(Android:104 IOS:105)
  8. *
  9. * @return 返回SDK管理对象
  10. */
  11. - (instancetype)initWithAppId:(NSString *)appId
  12. appKey:(NSString *)appKey
  13. channelId:(NSString *)channelId;
  14. /**
  15. *
  16. * 初始化SDK
  17. *
  18. * @param appId 游戏申请到的appid
  19. * @param appKey 游戏申请到的appkey
  20. * @param channelId 游戏发行渠道(Android:104 IOS:105)
  21. * @param enable 是否开启FaceBook登录功能(默认开启)
  22. *
  23. * @return 返回SDK管理对象
  24. */
  25. - (instancetype)initWithAppId:(NSString *)appId
  26. appKey:(NSString *)appKey
  27. channelId:(NSString *)channelId
  28. enable:(BOOL)enable

3、登录

  1. /**
  2. *
  3. * 功能:用户登录,并返回登录结果
  4. *
  5. * @param compeletion 结果(成功则存在用户信息)
  6. *
  7. * @return code 错误码
  8. * @return userInfo 登录用户信息
  9. * 包含以下字段
  10. * @return accessToken 访问token
  11. * @return isBindEgAccount 是否绑定EG账号
  12. * @return isBindEmail 是否绑定邮箱
  13. * @return uid cp账号id
  14. */
  15. - (void)login:(void(^)(NSInteger code, NSDictionary *userInfo))compeletion;

4、注销

  1. /**
  2. *
  3. * 功能:注销已登录用户
  4. *
  5. * @param compeletion 结果回调
  6. */
  7. - (void)logout:(dispatch_block_t)compeletion;

5、切换账号

  1. /**
  2. *
  3. * 功能:切换账号
  4. */
  5. - (void)switchAccount;

6、用户中心

  1. /**
  2. *
  3. * 个人中心
  4. */
  5. - (void)openUCenter;

7、支付

  1. /**
  2. *
  3. * 功能:拉起支付界面
  4. *
  5. * @param payinfo 商品信息
  6. * 包含以下字段的字典结构
  7. * @param role_id 角色Id (长度限制64位)
  8. * @param price 商品价格(单位:美分 整数)
  9. * @param goods_id SKU 商品Id (商店后台设置)
  10. * @param goods_name 商品名称 (长度限制64位)
  11. * @param pay_description 透传字段 (长度限制256位)
  12. * @param server_id 服务器id (长度限制10位)
  13. * @param notify_cp_url 默认可不传以服务器后台设置为准,若传此参数则以此参数为准 (长度限制256位)
  14. * @param compeletion 结果回调
  15. */
  16. - (void)payment:(NSDictionary *)payinfo compeletion:(NSInteger code)compeletion;

8、Facebook模块加载

  1. /**
  2. *
  3. * Facebook模块加载
  4. *
  5. * @param application
  6. * @param launchOptions
  7. *
  8. * @return
  9. */
  10. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

9、Facebook跳转

  1. /**
  2. *
  3. * Facebook跳转
  4. *
  5. * @param application
  6. * @param url
  7. * @param sourceApplication
  8. * @param annotation
  9. *
  10. * @return
  11. */
  12. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;
  13. /**
  14. *
  15. * Facebook跳转
  16. *
  17. * @param application
  18. * @param url
  19. * @param options
  20. *
  21. * @return
  22. */
  23. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options;

10、Facebook登录

  1. /**
  2. *
  3. * Facebok登录
  4. */
  5. - (void)showFacebookLoginView;

11、Facebook分享

  1. /**
  2. *
  3. * Facebook分享
  4. *
  5. * @param Title 标题(最新版SDK已去除此参数)
  6. * @param Desc 描述(最新版SDK已去除此参数)
  7. * @param Url 链接地址
  8. * @param ImageUrl 图片链接地址(最新版SDK已去除此参数)
  9. * @param compeletion 结果回调
  10. *
  11. * 只需要url,详情参照demo
  12. */
  13. - (void)showFacebookShareView:(NSDictionary *)content compeletion:(void(^)(EG_CODE code))compeletion;

12、Facebook邀请

  1. /**
  2. *
  3. * Facebook邀请
  4. *
  5. * @param appLinkURL 邀请App链接
  6. * @param previewImageURL 预览图链接地址
  7. * @param compeletion 结果回调
  8. */
  9. - (void)showFacebookInvitingView:(NSDictionary *)content compeletion:(void (^)(EG_CODE code))compeletion;

13、Facebook请求

  1. /**
  2. *
  3. * Facebook请求
  4. *
  5. * @param title 标题
  6. * @param message 描述(最长255个字符)
  7. * @param actionType 请求类型(发送/索取)
  8. * @param objectID 请求物品id
  9. * @param data 自定义内容,可用于区分请求类型
  10. * @param filters 图片链接地址
  11. * @param compeletion 结果回调
  12. * 注意:可以只传 message 字段。结果回调增加挑战人数的返回。
  13. */
  14. - (void)showFacebookGameRequestView:(NSDictionary *)content compeletion:(void(^)(EG_CODE code, NSDictionary *result))compeletion;

14、Facebook购买日志上传

  1. /**
  2. *
  3. * facebook购买日志上传
  4. *
  5. * @param purchaseAmount 价格
  6. * @param currency 货币类型(美元)
  7. */
  8. + (void)logPurchase:(double)purchaseAmount currency:(NSString *)currency;

15、Facebook事件统计上传

  1. /**
  2. *
  3. * fb完成关卡事件
  4. *
  5. * @param level
  6. */
  7. + (void)loggerLevel:(NSInteger)level;

16、Facebook事件统计上传

  1. /**
  2. *
  3. * facebook事件统计-新手引导事件
  4. *
  5. */
  6. + (void)loggerTutorial;

17、Facebook自定义事件上传

  1. /**
  2. *
  3. * 自定义事件统计
  4. *
  5. * @param event 事件
  6. * @param params 事件内容
  7. */
  8. + (void)loggerEvent:(NSString *)event params:(NSDictionary *)params;

18、游戏内绑定EG帐号和邮箱接口

  1. /**
  2. *
  3. * 绑定EG帐号或邮箱
  4. *
  5. * @param type 绑定类型 绑定EG帐号type值为:bindAccount 绑定邮箱type值为:bindEmail
  6. * @param compeletion 回调结果
  7. * @return code 错误码
  8. * @return userInfo 登录用户信息
  9. * 包含以下字段
  10. * @return uid cp账号id
  11. */
  12. - (void)binding:(NSString *)type compeletion:(void (^)(EG_CODE code, NSDictionary *userInfo))compeletion;

19、完成Facebook深度连接跳转

  1. /**
  2. *
  3. * 详见官网
  4. * https://developers.facebook.com/docs/ios/getting-started#startcoding
  5. *
  6. * 及示例代码
  7. */
  8. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
  9. - (BOOL)application:(UIApplication *)application
  10. openURL:(NSURL *)url
  11. options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options;

20、清除用户链中数据

  1. /**
  2. *
  3. * 清空用户数据
  4. * 注:用于解决错误,需要在调用登录方法等之前
  5. */
  6. - (void)clearUserChain:(void(^)(EG_CODE code))compeletion;

21、Firebase事件上报

  1. /**
  2. *
  3. * firebase
  4. *
  5. * @param name 事件名称
  6. * @param params 事件参数
  7. *
  8. */
  9. + (void)logFirebaseEventName:(NSString *)name params:(NSDictionary *)params;

代码示例(详细参见Demo)

必须在在App启动时初始化SDK,否则iOS支付的历史订单会购买失败

  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  2. // Override point for customization after application launch.
  3. self.manager = [[EGManager alloc] initWithAppId:@"114001"
  4. appKey:@"e1cbc8c0ec235daf0b4b5f80fcbac4e8"
  5. channelId:@"101"];
  6. // todo: others
  7. return [self.manager application:application didFinishLaunchingWithOptions:launchOptions];
  8. }
  9. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
  10. // todo: others
  11. // facebook 跳转
  12. return [self.manager application:application
  13. openURL:url
  14. sourceApplication:sourceApplication
  15. annotation:annotation];
  16. }
  17. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary *)options {
  18. // todo: others
  19. // facebook 跳转
  20. return [self.manager application:application openURL:url options:options];
  21. }
登录操作
  1. [self.manager login:^(EG_CODE code, NSDictionary *userInfo) {
  2. switch (code) {
  3. case EG_CODE_SUCCESS: {
  4. NSLog(@"EG_CODE_SUCCESS %@", userInfo);
  5. break;
  6. }
  7. case EG_CODE_CANCEL: {
  8. NSLog(@"EG_CODE_CANCEL %@", userInfo);
  9. break;
  10. }
  11. case EG_CODE_FAIL: {
  12. NSLog(@"EG_CODE_FAIL %@", userInfo);
  13. break;
  14. }
  15. case EG_CODE_LOGOUT: {
  16. NSLog(@"EG_CODE_LOGOUT %@", userInfo);
  17. break;
  18. }
  19. default: {
  20. NSLog(@"default %@", userInfo);
  21. break;
  22. }
  23. }
  24. }];
注销操作
  1. [self.manager logout:^() {
  2. // todo: 更新UI操作
  3. }];
账号切换操作
  1. [self.manager switchAccount];
购买商品操作
  1. [self.manager payment:@{ @"role_id":@(123),
  2. @"price":@(299),
  3. @"goods_id":@"com.enjoygame.pmer.iap.tier3",
  4. @"goods_name":@"测试商品名字",
  5. @"pay_description":@"商品描述",
  6. @"server_id":@(0) }
  7. compeletion:^(NSInteger code) {
  8. switch (code) {
  9. case EG_CODE_SUCCESS: {
  10. NSLog(@"EG_CODE_SUCCESS");
  11. break;
  12. }
  13. case EG_CODE_CANCEL: {
  14. NSLog(@"EG_CODE_CANCEL");
  15. break;
  16. }
  17. case EG_CODE_FAIL: {
  18. NSLog(@"EG_CODE_FAIL");
  19. break;
  20. }
  21. case EG_CODE_LOGOUT: {
  22. NSLog(@"EG_CODE_LOGOUT");
  23. break;
  24. }
  25. default: {
  26. NSLog(@"default");
  27. break;
  28. }
  29. }
  30. }];
进入个人中心操作
  1. [self.manager openUCenter];
Facebook分享
  1. [self.manager showFacebookShareView:@{ @"Url":@"http://www.enmonet.com" }];
Facebook邀请
  1. [self.manager showFacebookInvitingView];
Facebook请求
  1. 说明:actionType0表示无,默认是01表示发送;2表示请求;3表示挑战
  2. [self.manager showFacebookGameRequestView:@{ @"title":@"FaceBook请求测试",
  3. @"message":@"英卓移动。",
  4. @"actionType":@(0),
  5. @"objectID":@"物品id",
  6. @"filters":@(0),
  7. @"data":@"自定义数据" } compeletion:^(EG_CODE code, NSDictionary *result) {
  8. switch (code) {
  9. case EG_CODE_SUCCESS: {
  10. NSLog(@"EG_CODE_SUCCESS");
  11. NSLog(@"挑战人数:%@",result[@"challengeCounts"]);
  12. break;
  13. }
  14. case EG_CODE_CANCEL: {
  15. NSLog(@"EG_CODE_CANCEL");
  16. break;
  17. }
  18. case EG_CODE_FAIL: {
  19. NSLog(@"EG_CODE_FAIL");
  20. break;
  21. }
  22. case EG_CODE_LOGOUT: {
  23. NSLog(@"EG_CODE_LOGOUT");
  24. break;
  25. }
  26. default: {
  27. NSLog(@"default");
  28. break;
  29. }
  30. }
  31. ];
绑定帐号
  1. [self.manager binding:@"bindAccount"
  2. compeletion: ^(EG_CODE code, NSDictionary *userInfo) {
  3. if (code == EG_CODE_SUCCESS) {
  4. self.userIdLabel.text = [NSString stringWithFormat:@"当前登录用户名:%@\nuid:%@",
  5. userInfo[@"username"], userInfo[@"uid"]];
  6. } else {
  7. self.userIdLabel.text = @"";
  8. }
  9. switch (code) {
  10. case EG_CODE_SUCCESS: {
  11. NSLog(@"EG_CODE_SUCCESS %@ ", userInfo);
  12. break;
  13. }
  14. case EG_CODE_CANCEL: {
  15. NSLog(@"EG_CODE_CANCEL %@", userInfo);
  16. break;
  17. }
  18. case EG_CODE_FAIL: {
  19. NSLog(@"EG_CODE_FAIL %@", userInfo);
  20. break;
  21. }
  22. case EG_CODE_LOGOUT: {
  23. NSLog(@"EG_CODE_LOGOUT %@", userInfo);
  24. break;
  25. }
  26. default: {
  27. NSLog(@"default %@", userInfo);
  28. break;
  29. }
  30. }
  31. }];
清链操作
  1. [self.manager clearUserChain:^(EG_CODE code) {
  2. switch (code) {
  3. case EG_CODE_SUCCESS: {
  4. NSLog(@"EG_CODE_SUCCESS");
  5. break;
  6. }
  7. case EG_CODE_CANCEL: {
  8. NSLog(@"EG_CODE_CANCEL");
  9. break;
  10. }
  11. case EG_CODE_FAIL: {
  12. NSLog(@"EG_CODE_FAIL");
  13. break;
  14. }
  15. case EG_CODE_LOGOUT: {
  16. NSLog(@"EG_CODE_LOGOUT");
  17. break;
  18. }
  19. default: {
  20. NSLog(@"default");
  21. break;
  22. }
  23. }
  24. }];
Firebase事件上报
  1. //此处用level_up做示例
  2. //character可以不传
  3. [EGManager logFirebaseEventName:@"level_up" params:@{@"character":@"骑士",@"level":[NSNumber numberWithInteger:40]}];

英卓市场SDK

一、AppFlyer 需要单独接入, 必接项之外请上报充值数据。SDK接入详见附件文档:英卓市场、运营SDK之AppFlyerSDK接入文档。
二、Facebook已包含在EGSDk中,无需单独接入。
三、Google adwords

英卓运营SDK

一、talkingdata接入文档详见英卓市场、运营SDK之talkingDataSDK接入文档

横竖屏问题游戏须知

一、游戏为横屏

如果您的游戏是横屏的游戏,请确保以下几件事:

1、如果您是用xcode打包的,请确认1:

u_h

备注:打包的时候devices那边显示如上图,如果您的游戏既可以在iPhone上运行,也可以在iPad上运行,一定是Universal。

2、请分别确认iPhone与iPad状态的勾选,如下图所示:

iphone_h

ipad_h

备注:Upside Down是iPad特有属性,选择这个属性,iPad屏幕旋转时,上下可以翻转,默认是勾选的,请根据您的需求勾选。

3、请一定要在您生成的那几个与系统的生命周期一致的地方(对应原生iOS项目中的AppDelegate),添加如下代码:

  1. - (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(nullable UIWindow *)window {
  2. return UIInterfaceOrientationMaskLandscape;
  3. }

二、游戏为竖屏

如果您的游戏是竖屏的游戏,请确保以下几件事:

1、如果您是用xcode打包的,请确认1:

![屏幕快照 2017-09-04 下午6.20.44](/Users/Rosehybrid/Desktop/屏幕快照 2017-09-04 下午6.20.44.png)

备注:打包的时候devices那边显示如上图,如果您的游戏既可以在iPhone上运行,也可以在iPad上运行,一定是Universal。

2、请分别确认iPhone与iPad状态的勾选,如下图所示:

![屏幕快照 2017-09-04 下午6.21.46](/Users/Rosehybrid/Desktop/屏幕快照 2017-09-04 下午6.21.46.png)

![屏幕快照 2017-09-04 下午6.21.57](/Users/Rosehybrid/Desktop/屏幕快照 2017-09-04 下午6.21.57.png)

备注:Upside Down是iPad特有属性,选择这个属性,iPad屏幕旋转时,上下可以翻转,默认是勾选的,请根据您的需求勾选。

3、请一定要在您生成的那几个与系统的生命周期一致的地方(对应原生iOS项目中的AppDelegate),添加如下代码:

  1. //如果您的游戏中iPad必须是上下可翻转的,那么请在此方法中判断是IPad后,return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown。
  2. if(IS_IPAD){
  3. return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
  4. } else {
  5. return UIInterfaceOrientationMaskPortrait;
  6. }
  7. //对于iPhone来说没有上下翻转这一说,所以一定要写return UIInterfaceOrientationMaskPortrait。
  8. //如果您的游戏不在意iPad的上下旋转,就不需要判断是否是iPad,直接显示示例中的代码。
  9. - (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(nullable UIWindow *)window {
  10. return UIInterfaceOrientationMaskPortrait;
  11. }

Firebase接入须知

一、接入Firebase,一定要导入相应的配置文件到游戏。文件名称如下:

GoogleService-Info.plist

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注