ScreenzSDK 4.3.0

ScreenzSDK 4.3.0

测试已测试
语言语言 Obj-CObjective C
许可 NOASSERTION
发布最后发布2020年4月

Sebastian CastroMathias Caldas 维护。



  • 作者:
  • Mathias Caldas

Screenz SDK

[~>4.0]

Screenz SDK 允许您在Screenz环境中实现自己的Screenz客户端。

该环境需要一个服务器端组件,将由基础设施部门提供,用于在服务器上创建应用,该应用将通过框架中的id进行引用。

为了制作您自己的Screenz客户端,我们将指导您完成以下步骤

  • Screenz框架
  • 应用程序配置文件
  • 基本初始化代码

添加Screenz框架

首先,在Xcode中创建单独视图应用程序。之后必须像以下截图所示将ScreenzSDK.framework添加到项目中

添加构建阶段脚本

为了让sdk正确工作,需要在构建过程结束时对其签名。为此,请将以下 'Run Script' 作为项目构建阶段的最后一个步骤添加

pushd "${TARGET_BUILD_DIR}"/"${PRODUCT_NAME}".app/Frameworks/ScreenzSDK.framework/Frameworks
for EACH in *.framework; do
/usr/bin/codesign --force --deep --sign "${EXPANDED_CODE_SIGN_IDENTITY}" --entitlements "${TARGET_TEMP_DIR}/${PRODUCT_NAME}.app.xcent" --timestamp=none $EACH
done
popd
echo "BUILD DIR ${TARGET_BUILD_DIR}"

重要:该框架需要iOS 9.0+,所以请记住将 "部署目标" 设置为9.0或更高版本。

添加应用程序配置文件

框架使用JSON配置文件来实现不同的功能,这些功能可以本地在客户端执行,并传输到服务器。该配置文件的形式如下

{
    "pids": [<your application ids>],
    "dev_env" : false,
    "useOnPageLoaded" : true,
    "os": {
        "ios": {
            <platform specifics configuration>
        }
    },
    "glossary": {
        <glossary terms>
    }
}

我们将在稍后讨论配置文件中的每个项目,但要集成到客户端,您只需像添加其他文件一样添加该文件。

框架配置代码

此时,您的项目应该看起来像这样

在您的AppDelegate中的application:didFinishLaunchingWithOptions回调中使用配置文件初始化管理器

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    ....
    
    //Initialize the SDK Manager shared instance
    ScreenzSDKManager* manager = [ScreenzSDKManager sharedInstance];
    [manager loadConfigurationFromJSONFile:@"cn-data-dev"];
    /////

    return YES;
}

此外,您还需要在以下回调中向框架发送信息

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    NSLog(@"RECEIVE Remote notification %@",userInfo);
    
    [[ScreenzSDKManager sharedInstance] receiveRemoteNotificationWithData:userInfo
                                                         applicationState:application.applicationState
                                                        completionHandler:completionHandler];
}

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
    if (notificationSettings.types == UIUserNotificationTypeNone)
        [[ScreenzSDKManager sharedInstance] registerUserNotification];
    else
        [[UIApplication sharedApplication] registerForRemoteNotifications];
}

- (void) application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    [[ScreenzSDKManager sharedInstance] registerForRemoteNotificationsWithToken:deviceToken];
}

- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error {
    NSLog(@"Failed to get device token, error: %@", error);
    [[ScreenzSDKManager sharedInstance] failtRegisterForRemoteNotifications];
}

- (BOOL)application: (UIApplication *)application openURL: (NSURL *)url sourceApplication: (NSString *)sourceApplication annotation: (id)annotation {
    return [[ScreenzSDKManager sharedInstance] processApplicaitonOpenURL:url sourceApplication:sourceApplication annotation:annotation configurationFile:JSON_DATA viewController:self.window.rootViewController.presentedViewController];
}

-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
    return [[ScreenzSDKManager sharedInstance] processApplicaitonOpenURL:url options:options configurationFile:JSON_DATA  viewController:self.window.rootViewController.presentedViewController];
}

以上是配置框架的基本步骤。要显示框架的内容,您必须在视图控制器中为其分配一个视图。

要显示框架,您必须在视图中加载它。例如

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [[ScreenzSDKManager sharedInstance] loadInView:self.view viewController:self];
}

这将使用视图控制器中全部空间将框架加载到视图中(我们设置视图为视图控制器的根视图)。

现在应用已经准备好运行。

应用程序配置文件

此JSON文件用于配置框架的所有客户端和服务器方面。整个JSON文件应类似如下

{
    "pids": [<your application ids>],
    "dev_env" : false,
    "useOnPageLoaded" : true,
    "video_upload_key" : <your video upload api key>,
    "os": {
        "ios": {
            "notifications_enabled":true,
            "web_data_mode":"production"
        }
    },
    "glossary": {
        "noConnectionError": "Please check your internet connection"
    }
}

pid: [Integer, Required] 服务器后端中标识您的应用程序的应用ID。

dev_env: [Boolean, Optional] 指定是否使用开发环境,大多在开发期间使用,可能应该设置为false(默认值,如果不存在)。

useOnPageLoaded: [Boolean, Optional] 这应由服务器引用,如果设置的webapp支持此回调则设置为true(默认值为false)。

os.ios: [Array, Optional] 平台特定功能

  • notifications_enabled [Boolean]: 是否启用通知
  • web_data_mode [String]: 来自服务器的数据模式,可能始终使用“production”

glossary: [Array, Optional] 客户端可以配置的应用中使用的术语表。目前仅支持“noConnectionError”消息。

video_upload_key: [String, Optional] 上传视频服务的API密钥。

Screenz SDK 组件

我们将解释 SDK 的主要组件,以便更好地理解框架本身以及 SDK 内部的工作。

Screenz SDK 管理器

此管理器提供了一个统一的入口,用于处理框架的配置和初始化。

旨在提供框架的所有功能,并提供选项以在整个应用程序中使用共享实例,或者创建多个实例以独立处理。

此类的关键方法是负责将应用程序配置加载到 SDK 中,这些方法包括 loadConfigurationFromJSONFileloadConfigurationFromJSONString。这两个方法执行相同的操作,根据 JSON 文件或字符串加载 appConfiguration 属性。此外,loadInView 负责显示框架的网页视图。

还提供了处理通知和应用程序启动的方法。

除了这些方法之外,管理器存储在应用程序生命周期中使用的数据。正如我们所知,它存储了应用程序配置,但也存储了服务器配置(serverData)、SDK 配置(sdkConfiguration)和方案值(schemeValues)。

Screenz SDK 管理器还可以设置一个代理来接收来自网页的数据。为此,您只需使用符合 ScreenzSDKManagerDelegate 协议的对象调用 setDelegate 方法。当网页发送一些数据返回到应用时,它将可在 ScreenzSDKManagerDelegate_dataReceived 选择器中访问。

退出 SDK 事件

使用上述代理,网页将使用数据 'sdk-exit-new' 请求退出。您应该订阅此事件,在收到时关闭 SDK,并相应地处理视图的生命周期。

此外,还有一个可选的额外调用,可用于清理 SDK 可能保留在内存中的任何对象如下所示:

[manager clearView];

向 webview 发送数据

您可以使用以下方法发送webview需要消耗的任何数据。

[manager setExtraData:@"data to store"];

在本示例中,当webview运行时,将能够访问“要存储的数据”。这些数据需要在启动框架之前设置。

您还可以使用这些方法设置要打开的页面及其pid。

[manager setLaunchPageID:@"[PAGEID]"];
[manager changeCurrentPID:PID];

Screenz SDK存储键

在应用程序的生命周期中,SDK在用户配置设置中存储一些数据。以下是在需要时可以访问的用户配置设置中的键。

键名 描述
kSSDK_LOCAL_CONFIG_PID 在应用程序配置中设置的appId
kSSDK_LOCAL_CONFIG_isQA QA模式是否启用
kSSDK_LOCAL_CONFIG_PushPageId 在通知中接收的pageId
kSSDK_LOCAL_CONFIG_MsgId 在通知中接收的msgId
kSSDK_LOCAL_CONFIG_UDID 当前手机的udid