app客户端开发协议细节介绍

APP客户端开发协议是指在开发APP客户端时,开发者和委托方之间达成的一种协议,明确双方的权利和义务,保障项目的顺利进行和最终交付。本文将详细介绍APP客户端开发协议的原理和内容。

1. 协议原理

APP客户端开发协议的原理是基于双方的合作和互信,通过明确约定双方的权益和责任,规范开发过程,保障项目的顺利进行。协议的签订可以有效避免开发过程中的纠纷和风险,提高合作效率和项目质量。

2. 协议内容

(1)项目概述:明确项目的目的、范围和期望效果,包括APP的功能、界面设计和用户体验等方面的要求。

(2)开发时间和里程碑:约定项目的起止时间、各个阶段的交付时间和验收标准,确保开发进度和质量可控。

(3)开发费用和支付方式:明确项目的开发费用和支付方式,包括总费用、分期支付方式、违约金等条款。

(4)知识产权:规定APP的知识产权归属,包括软件著作权、商标权和专利权等。一般情况下,开发者保留软件著作权,但委托方可以获得合理的使用权。

(5)保密条款:约定双

方在开发过程中要保守对方的商业秘密和技术细节,以及在协议终止后的保密义务。

(6)维护和支持:明确开发者在项目交付后的维护和支持责任,包括bug修复、功能更新和技术支持等。

(7)协议终止和违约责任:约定协议的终止条件和违约责任,以及违约方应承担的违约金和赔偿责任。

APP

3. 协议签订和履行

(1)协议签订:双方在明确项目需求和开发方案后,通过书APP开发面形式签订协议,确保双方对项目的理解一致。

(2)协议履行:开发过程中,双方要按照协议的约定进行合作,及时沟通和解决问题,确保项目按时交付和达到预期效果。

(3)协议变更:如果在开发过程中遇到特殊情况,需要对协议进行变更,双方应及时协商并签订变更协议。

4. 注意事项

(1)明确需求:在签订协议之前,双方应充分沟通,确保对项目需求的理解一致,避免后期出现需求变更和纠纷。

(2)合理分工:在协议中明确各方的责任和义务,确保开发过程的合理分工和协调配合。

(3)保护知识产权:在协议中明确知识产权的归属,保护双方的合法权益。

(4)风险控制:在协议中约定项目的验收标准和违约责任,确保项目的质量和进度可控。

总结:

APP客户端开发协议是保障开发过程顺利进行和最终交付的重要文件,通过明确双方的权益和责任,规范开发过程,可以有效避免纠纷和风险。在签订协议之前,双方应充分沟通,明确项目需求和开发方案。在协议履行过程中,双方要及时沟通,解决问题,确保项目按时交付和达到预期效果。

用自己的苹果id签名操作步骤介绍

在iOS系统中,每个应用都必须经过数字签名验证才能被安装和运行。数字签名验证是一种安全机制,可以确保应用的来源和完整性,防止应用被篡改或恶意软件被安装。

苹果为每个开发者提供了一个唯一的开发者账号和苹果ID,开发者可以使用该账号来签署自己的应用程序。

数字签名的原理是使用开发者的私钥对应用程序进行签名,然后将签名和公钥一起打包到应用程序中。当用户安装应用程序时,iOS系统会使用公钥验证应用程序的签名,以确保应用程序来自于合法的开发者苹果ipa重签名,并且没有被篡改。

使用自己的苹果ID签名应用程序需要以下步骤:

1.

注册苹果开发者账号并获取开发者证书

首先,需要注册一个苹果开发者账号,并在开发者中心下载开发者证书。开发者证书包含了开发者的公钥和私钥,用于数字签名和验证应用程序。

2. 在Xcode中设置开发者账号

在Xcode中选择“Preferences”,然后选择“Accounts”,点击“+”按钮添加开发者账号。输入苹果ID和密码,然后选择开发者证书。

3. 在Xcode中打包应用程序并进行签名

在Xcode中选择“Product”菜单,然后选择“Archive”选项,Xcode会自动打包应用程序。在打包完成后,选择“Distribute App”选项,然后选择“Ad Hoc”或“Enterprise”选项,选择开发者证书进行签名。

4. 导出签名后的应用程序

在签名完成后,可以将应用程序导出为ipa文件,以便在其他设备上进行安装和测试。选择“Export”选项,然后选择“Ad Hoc”或“Enterprise”选项,选择签名的应用程序和开发者证书,导出ipa文件。

5. 在其他设备上安装应用程序

使用iTunes或者其他工具将ipa文件安装到其他设备上,iOS系统会自动验证应用程序的签名,并且只有签名合法的如何在苹果电脑上签名应用程序才能被安装和运行。

总之,使用自己的苹果ID签名应用程序是非常方便的,只需要注册开发者账号并获取开发者证书,然后在Xcode中进行签名即可。数字签名验证是iOS系统的重要安全机制,可以保护应用程序的来源和完整性,避免恶意软件的入侵。

一门APP证书制作工具(https://platform.yimenapp.com/)提供APP证书在线制作,支持苹果证书、安卓证书在线一键快捷制作。工具完全免费,注册成为一门APP开发者即可使用,全中文化云端APP证书工具。
一键制作IOS苹果证书,包含appstore上架证书、开发环境测试证书、ADhoc生产环境测试证书、在线生成P12开发者证书证书,P12推送证书、P8推送证书,快捷绑定UDID、自定义包名Bundle ID、在线获取描述文件;
一键制作安卓证书,支持自定义安卓包名、签名文件密码(storepass)、别名(alias)、别名密码(keypass)、公司/机构名称 (O)、部门 (OU)、国家/地区 (C)、省份 (ST)、城市 (L)、邮箱 (E)、以及安卓证书有效期。

app开发不给源代码有道理嘛?

在移动应用程序开发中,有时您可能会遇到一个问题,即应用程序不提供源代码。通常情况下,这可能是由于知识产权和商业保密等原因。

以下是一些原因解释:

1.知识产权保护

大多数移动应用程序都包含了一些知识产权保护的代码,例如操作系统的代码、第三方库等。这些代码都是有版权保护的,如果开发者公开代码,将会导致版权问题。

2.商业保密

有些公司开发了一些特定的应用程序,并且希望它们保持私有。这可能是由于它们包含专有技术、机密信息或者商业机密。如果公司的应用程序源代码公开,将会损害其商业利益。

3.维护困难

如果开发者将应用程序代码公开,他们将需要为其提供技术支持,包括修复和维护问题。这可能并不是一项简单的任务,特别是当应用程序采用了多种技术和库时,会APP给维护带来很大的困难。

尽管没有源代码会给开发者带来一些不便,但还是有一些方法可以用来解决无源代码的问题:

1.逆向工程

逆向工程是一种通过分析应用程序二进制代码的行为对代码进行猜测的技术。这通常需要一定的经验和知识,并且可能是非常耗时的。这个最终目的是使你能够理解代码并进行调试。

2.使用开源框架

开源框架是一种公开使用的代码库,开发者可以免费使用和修改。使用开源框架可以帮助您避免从头开始构建应用程序,从而大幅度降低开发成本和时间。

3.购买源代码许可证

一些公司可能会提供源代码许可证,使其他开发者可以访问其应用程序代码,以用于非商业目的。如果您需要获得商业授权,需要购买APP开发源代码许可证以获得完整的应用程序源

代码。

总之,虽然大多数移动应用程序都希望保护其源代码,但开发者仍然可以通过逆向工程、使用开源框架或购买源代码许可证等方式来解决无源代码的难题。无论使用哪种方法,开发者应该时刻记住,不要侵犯任何知识产权或版权问题。

setDownloadListener 设置下载监听器 APP开发接入苹果内购IOS内购开发教程

用做网页的技术做APP
一门提供标准化的jsbridge-mini.js库,您只需要在页面引用执行JS即可实现各种原生APP、原生PC的功能能力。

==================APP端==================
【APP端】(安卓版&苹果版)目前提供200+原生功能,2000+JS映射接口,用做网站的技术即可实现各种原生APP能力、APP demo地址https://www.yimenapp.com/doc/demo.cshtml下载教程:
♦ JS-SDK 引用方式:
♦ 普通网页 script 方式加载:下载最新版,请在页面上调用 jsBridge 接口之前引用 jsbridge-mini.js 库;
♦ js module 方式引用:npm install ym-jsbridge 具体请参考 npm package
一门APP开发平台通用JS

setDownloadListener 设置下载监听器 APP开发接入苹果内购IOS内购开发教程

• 调用 startDownloads/pauseDownloads/resumeDownloads/cancelDownloads 方法之前应设置本监听器,所有下载状态变更都会通知到此监听器。

• 系统以数组形式将下载信息传递给回调参数 downloads

• 如果多次设置监听器,只有最后一个才会收到通知。

核心代码示例,详情参阅demo

jsBridge.iap.setDownloadListener(function(succ, downloads) {
  if (succ) {
    alert(JSON.stringify(downloads));
  } else {
    alert("操作失败\n" + JSON.stringify(downloads));
  }
});
alert("已设置监听器");

/**
downloads 下载信息数组
[{    
  state:         //下载状态,详见setTransanctionListener的下载状态常量说明,数字类型
  transactionId: //下载内容所属交易id,字符串类型
  contentId:     //下载内容id,字符串类型
  progress:      //下载进度,取值范围0~1,数字类型
  contentLength: //文件内容大小,数字类型
  timeRemaining: //下载剩余时间,-1时表示未知,数字类型
  contentVersion://下载内容的版本,字符串类型
  contentURL:    //下载成功后文件路径,字符串类型
  errorCode:     //下载失败时的错误码,数字类型
  errorMsg:      //下载失败时的错误描述,字符串类型
}]

**/

A标签执行JS示例代码

<a href="javascript:void(0)" onclick="zhixing()">执行</a> 
<!-- 写入一个A标签href值为"javascript:void(0)",定义点击事件onclick;-->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- 在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接;-->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
jsBridge.iap.setDownloadListener(function(succ, downloads) {
  if (succ) {
    alert(JSON.stringify(downloads));
  } else {
    alert("操作失败\n" + JSON.stringify(downloads));
  }
});
alert("已设置监听器");

/**
downloads 下载信息数组
[{    
  state:         //下载状态,详见setTransanctionListener的下载状态常量说明,数字类型
  transactionId: //下载内容所属交易id,字符串类型
  contentId:     //下载内容id,字符串类型
  progress:      //下载进度,取值范围0~1,数字类型
  contentLength: //文件内容大小,数字类型
  timeRemaining: //下载剩余时间,-1时表示未知,数字类型
  contentVersion://下载内容的版本,字符串类型
  contentURL:    //下载成功后文件路径,字符串类型
  errorCode:     //下载失败时的错误码,数字类型
  errorMsg:      //下载失败时的错误描述,字符串类型
}]

**/

}
</script>
<!--执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可;-->

按钮执行JS示例代码

<button onclick="zhixing()" >执行</button>
<!-- //写一个按钮,定义点击执行事件; -->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- //在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接; -->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
jsBridge.iap.setDownloadListener(function(succ, downloads) {
  if (succ) {
    alert(JSON.stringify(downloads));
  } else {
    alert("操作失败\n" + JSON.stringify(downloads));
  }
});
alert("已设置监听器");

/**
downloads 下载信息数组
[{    
  state:         //下载状态,详见setTransanctionListener的下载状态常量说明,数字类型
  transactionId: //下载内容所属交易id,字符串类型
  contentId:     //下载内容id,字符串类型
  progress:      //下载进度,取值范围0~1,数字类型
  contentLength: //文件内容大小,数字类型
  timeRemaining: //下载剩余时间,-1时表示未知,数字类型
  contentVersion://下载内容的版本,字符串类型
  contentURL:    //下载成功后文件路径,字符串类型
  errorCode:     //下载失败时的错误码,数字类型
  errorMsg:      //下载失败时的错误描述,字符串类型
}]

**/

}
</script>
<!-- //执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可; -->

getProducts 获取产品列表 APP开发接入苹果内购IOS内购开发

用做网页的技术做APP
一门提供标准化的jsbridge-mini.js库,您只需要在页面引用执行JS即可实现各种原生APP、原生PC的功能能力。

==================APP端==================
【APP端】(安卓版&苹果版)目前提供200+原生功能,2000+JS映射接口,用做网站的技术即可实现各种原生APP能力、APP demo地址https://www.yimenapp.com/doc/demo.cshtml下载教程:
♦ JS-SDK 引用方式:
♦ 普通网页 script 方式加载:下载最新版,请在页面上调用 jsBridge 接口之前引用 jsbridge-mini.js 库;
♦ js module 方式引用:npm install ym-jsbridge 具体请参考 npm package
一门APP开发平台通用JS

getProducts 获取产品列表 APP开发接入苹果内购IOS内购开发

核心代码示例,详情参阅demo

jsBridge.iap.getProducts({
  //你在 https://appstoreconnect.apple.com/ 创建的产品ID数组
  productIds: [
    "com.yidiantongqa.app.vip30",
    "com.yidiantongqa.app.vip60",
    "com.yidiantongqa.app.vip360"
  ]
}, function(succ, products) {
  if (succ) {
    alert(JSON.stringify(products));
  } else {
    alert("操作失败\n" + JSON.stringify(products));
  }
});

/**
products 返回产品信息
{   
  invalidProductIds:[]      //无效的产品ID,如果你提供了无效的产品ID,会在这里返回,数组类型
  products:                 //有效的产品信息,数组类型
  [{
    productId:              //产品id,字符串类型
    title:                  //产品标题,字符串类型
    description:            //产品描述,字符串类型
    price:                  //产品价格,数字类型
    formattedPrice:         //产品格式化后的价格,如¥6.00,字符串类型
    downloadable:           //是否有下载内容,布尔类型
    downloadContentLengths: //下载内容长度,数字组成的数组
    downloadContentVersion: //下载内容的版本,字符串类型
  }]
}

**/

A标签执行JS示例代码

<a href="javascript:void(0)" onclick="zhixing()">执行</a> 
<!-- 写入一个A标签href值为"javascript:void(0)",定义点击事件onclick;-->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- 在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接;-->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
jsBridge.iap.getProducts({
  //你在 https://appstoreconnect.apple.com/ 创建的产品ID数组
  productIds: [
    "com.yidiantongqa.app.vip30",
    "com.yidiantongqa.app.vip60",
    "com.yidiantongqa.app.vip360"
  ]
}, function(succ, products) {
  if (succ) {
    alert(JSON.stringify(products));
  } else {
    alert("操作失败\n" + JSON.stringify(products));
  }
});

/**
products 返回产品信息
{   
  invalidProductIds:[]      //无效的产品ID,如果你提供了无效的产品ID,会在这里返回,数组类型
  products:                 //有效的产品信息,数组类型
  [{
    productId:              //产品id,字符串类型
    title:                  //产品标题,字符串类型
    description:            //产品描述,字符串类型
    price:                  //产品价格,数字类型
    formattedPrice:         //产品格式化后的价格,如¥6.00,字符串类型
    downloadable:           //是否有下载内容,布尔类型
    downloadContentLengths: //下载内容长度,数字组成的数组
    downloadContentVersion: //下载内容的版本,字符串类型
  }]
}

**/
}
</script>
<!--执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可;-->

按钮执行JS示例代码

<button onclick="zhixing()" >执行</button>
<!-- //写一个按钮,定义点击执行事件; -->
<script src="您的服务器URL/jsbridge-mini.js"></script>
<!-- //在您的服务器引入一门JS地址,请下载jsbridge-mini.js上传您自己的服务器获取链接; -->
<script type="text/javascript">
function zhixing() {


<!--这里可以直接复制JS核心代码到此{}括号内-->
jsBridge.iap.getProducts({
  //你在 https://appstoreconnect.apple.com/ 创建的产品ID数组
  productIds: [
    "com.yidiantongqa.app.vip30",
    "com.yidiantongqa.app.vip60",
    "com.yidiantongqa.app.vip360"
  ]
}, function(succ, products) {
  if (succ) {
    alert(JSON.stringify(products));
  } else {
    alert("操作失败\n" + JSON.stringify(products));
  }
});

/**
products 返回产品信息
{   
  invalidProductIds:[]      //无效的产品ID,如果你提供了无效的产品ID,会在这里返回,数组类型
  products:                 //有效的产品信息,数组类型
  [{
    productId:              //产品id,字符串类型
    title:                  //产品标题,字符串类型
    description:            //产品描述,字符串类型
    price:                  //产品价格,数字类型
    formattedPrice:         //产品格式化后的价格,如¥6.00,字符串类型
    downloadable:           //是否有下载内容,布尔类型
    downloadContentLengths: //下载内容长度,数字组成的数组
    downloadContentVersion: //下载内容的版本,字符串类型
  }]
}

**/

}
</script>
<!-- //执行核心代码;
//如果需要进入页面就执行,去掉点击事件即可; -->

什么是iOS?

什么是iOS?

iOS 是由苹果公司开发的移动操作系统 。苹果公司最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch 、iPad 以及 Apple TV 等产品上。
有关系统识别的方式可查看 my.getSystemInfo 接口的 platform 参数。

微信开放平台iOS接入指南

微信开放平台iOS接入指南

iOS接入指南

注 1:接入Open SDK的开发者,请先认真阅读《微信Open SDK个人信息处理规则》并确保对 OpenSDK 的接入使用情况符合上述规则的相关要求。

关于openSDK1.8.6及以上版本的更新说明

由于苹果iOS 13系统版本安全升级,为此 openSDK 在1.8.6及以上版本进行了适配。 1.8.6及以上版本支持Universal Links方式跳转,对 openSDK 分享进行合法性校验。

*建议开发者接入新版本 SDK , 覆盖测试微信7.0.7或以上版本、iOS12或13,以验证所使用的接口的功能性和可用性。

目录

SDK接入成功验证指引

环境

SDK版本: SDK1.8.6或以上
微信版本: 7.0.7或以上
系统版本: iOS12或以上

1.确认微信的Universal Links正常

首先,确认微信(7.0.7或以上版本)的Universal Links在设备上正常,以确保 openSDK 与微信双向使用Universal Links通信

Safari输入

https://help.wechat.com/app/  

下拉查看是否有打开微信入口(如下图)。若无入口,可能是由于系统拉取微信Universal Links失败,请检查手机网络状态是否正常,或更新/重装微信

2.确认 App 的Universal Links配置成功

微信使用第三方 App 的Universal Links唤起第三方 App 时,会在Universal Links末尾拼接路径和参数,因此开发者Universal Links配置必须加上通配符,并测试Universal Links拼接字符串能否唤起app

建议Universal Links配置path,例如/app/*, 避免全域命中Universal Links跳转

以SDK Sample配置为例:

{ "appID": "teamID.com.tencent.xin.SDKSample", "paths": ["/sdksample/*"] }

测试配置是否成功:
1) Safari输入Universal Links(包括完整路径)+随机字符串(例如: abc)
SDK Sample的Universal Links:

https://help.wechat.com/sdksample/  

测试输入 Safari 的Universal Links:

https://help.wechat.com/sdksample/abc

2)下拉页面检查是否有打开 app 的入口提示(如下图)

3.连续发起分享,确认不会发生多次二次跳转行为

当用户首次使用新版本 SDK 发起分享时,将会出现如下交互流程:从 App 拉起微信 – 出现“正在连接”页面 – 返回 App- 重新打开微信。以上是新的安全验证流程,每个用户在首次使用时会出现上述跳转。(如同一用户多次使用分享都出现跳转,请按照以下接入指引,检查Universal Links配置)

4.如 App 有使用微信授权登录功能,确认授权不出现二次确认弹窗

授权登录如出现以下二次确认弹窗,原因是微信无法通过 App 提供的Universal Links返回导致,很可能是 App 的Universal Links不生效,请按照接入指引检查Universal Links配置

SDK接入指引

*请注意红字部分配置

1)根据 苹果文档 配置你应用的Universal Links
微信对Universal Links配置要求
a)Universal Links必须支持https
b)Universal Links配置的 paths 不能带 query 参数
c)微信使用Universal Links拉起第三方 App 时,会在Universal Links末尾拼接路径和参数,因此 App 配置的 paths 必须加上通配符/*
示例:

{ 
"appID": "8P7343TG54.com.tencent.xin.SDKSample",    
"paths": ["/sdksample/*"]
}

2)打开Associated Domains开关,将Universal Links域名加到配置上

3)检查确认 App 的Universal Links配置成功,通过上述SDK接入成功验证指引操作

请到 开发者应用登记页面 进行登记,登记并选择移动应用进行设置后,将获得AppID,可立即用于开发。但应用登记完成后还需要提交审核,只有审核通过的应用才能正式发布使用。

3.下载微信终端 SDK 文件

SDK 文件包括 libWeChatSDK.a,WXApi.h,WXApiObject.h 三个。 如选用手动集成,请前往资源下载页下载最新 SDK 包

4.搭建开发环境

4.1 通过 CocoaPods 集成

[1] 在 XCode 中建立你的工程。

[2]  在工程的 Podfile 里面添加以下代码:

pod 'WechatOpenSDK'

保存并执行 pod install,然后用后缀为.xcworkspace 的文件打开工程。

注意:

命令行下执行 pod search WechatOpenSDK,如显示的 WechatOpenSDK 版本不是最新的,则先执行 pod repo update 操作更新本地 repo 的内容

关于 CocoaPods 的更多信息请查看 CocoaPods 官方网站 。

[3] 在 Xcode 中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“URL type“添加“URL scheme”为你所注册的应用程序 id(如下图所示)。 

Xcode 设置 URL scheme

[4] 在 Xcode 中,选择你的工程设置项,选中“TARGETS”一栏,在 “info”标签栏的“LSApplicationQueriesSchemes“添加weixin、weixinULAPI、weixinURLParamsAPI(如下图所示)。

经验证,在iOS 15系统上,使用Xcode 13编译出的App,LSApplicationQueriesSchemes的数量会限制为50个。第50个之后的 scheme 配置会不生效,需要确保”weixin”、”weixinULAPI”和”weixinURLParamsAPI”配置在 LSApplicationQueriesSchemes 的前50个。

[5] 在你需要使 用微信终端 API 的文件中 import WXApi.h 头文件,并增加 WXApiDelegate 协议。

#import <UIKit/UIKit.h>
#import "WXApi.h"

@interface AppDelegate : UIResponder<UIApplicationDelegate, WXApiDelegate>

@property (strong, nonatomic) UIWindow *window;

@end

3.2 手动集成

[1] 在 XCode 中建立你的工程。

[2] 将 SDK 文件中包含的 libWeChatSDK.a,WXApi.h,WXApiObject.h 三个文件添加到你所建的工程中(如下图所示,建立了一个名为 Test 的工程,并把以上三个文件添加到 Test 文件夹下)。

(注:请使用 xCode4.5 及以上版本)

[3]开发者需要在工程中链接上:Security.framework, CoreGraphics.framework, WebKit.framework

[4] 在你的工程文件中选择 Build Setting,在”Other Linker Flags”中加入”-ObjC -all_load”,在 Search Paths 中添加 libWeChatSDK.a ,WXApi.h,WXApiObject.h,文件所在位置(如下图所示)。

(注:请使用 xCode4.5 及以上版本) 

[5] 在 Xcode 中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“URL type“添加“URL scheme”为你所注册的应用程序 id(如下图所示)。

Xcode 设置 URL scheme

[6] 在 Xcode 中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“LSApplicationQueriesSchemes”添加weixin、weixinULAPI、weixinURLParamsAPI(如下图所示)。

经验证,在iOS 15系统上,使用Xcode 13编译出的App,LSApplicationQueriesSchemes的数量会限制为50个。第50个之后的 scheme 配置会不生效,需要确保”weixin”、”weixinULAPI”和”weixinURLParamsAPI”配置在 LSApplicationQueriesSchemes 的前50个。

[7] 在你需要使 用微信终端 API 的文件中 import WXApi.h 头文件,并增加 WXApiDelegate 协议。

#import <UIKit/UIKit.h>
#import "WXApi.h"

@interface AppDelegate : UIResponder<UIApplicationDelegate, WXApiDelegate>

@property (strong, nonatomic) UIWindow *window;

@end

5.在代码中使用开发工具包

[1] 要使你的程序启动后微信终端能响应你的程序,必须在代码中向微信终端注册你的 id。(如下图所示,在 AppDelegate 的 didFinishLaunchingWithOptions 函数中向微信注册 id)。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //向微信注册
    [WXApi registerApp:APP_ID
universalLink:UNIVERSAL_LINK];
    return YES;
}

[2] 重写 AppDelegate 的 handleOpenURL 和 openURL 方法:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    return  [WXApi handleOpenURL:url delegate:self];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    return [WXApi handleOpenURL:url delegate:self];
}

[3] 重写 AppDelegate 或SceneDelegate的 continueUserActivity 方法: 注意:适配了 SceneDelegate 的App,系统将会回调 SceneDelegate 的continueUserActivity方法,所以需要重写 SceneDelegate 的该方法。

AppDelegate:

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRest
oring>> * __nullable restorableObjects))restorationHandler {
    return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}

SceneDelegate:

- (void)scene:(UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity {
    [WXApi handleOpenUniversalLink:userActivity delegate:self];
}

[4] 现在,你的程序要实现和微信终端交互的具体请求与回应,因此需要实现 WXApiDelegate 协议的两个方法:

-(void) onReq:(BaseReq*)reqonReq

是微信终端向第三方程序发起请求,要求第三方程序响应。第三方程序响应完后必须调用 sendRsp 返回。在调用 sendRsp 返回时,会切回到微信终端程序界面。

-(void) onResp:(BaseResp*)resp

如果第三方程序向微信发送了 sendReq 的请求,那么 onResp 会被回调。sendReq 请求调用后,会切到微信终端程序界面。

具体在此两方法中所要完成的内容由你定义,具体可参考微信开发工具包中的 SDK Sample Demo 源码。

[5] 如果你的程序要发消息给微信,那么需要调用 WXApi 的 sendReq 函数:

+ (void)sendReq:(BaseReq *)req completion:(void (^
__nullable)(BOOL success))completion;

其中 req 参数为 SendMessageToWXReq 类型。

需要注意的是,SendMessageToWXReq 的 scene 成员,如果 scene 填 WXSceneSession,那么消息会发送至微信的会话内。如果 scene 填 WXSceneTimeline,那么消息会发送至朋友圈。如果 scene 填 WXSceneFavorite,那么消息会发送到“我的收藏”中。scene 默认值为 WXSceneSession。

至此,你已经能使用微信终端 SDK 的 API 内容了。如果想更详细了解每个 API 函数的用法,请查阅官网 API 文档或自行下载阅读微信 SDK Sample Demo 源码

使用SDK 自检函数排查接入问题

SDK1.8.7版本,WXApi新增了自检函数checkUniversalLinkReady:,帮助开发者排查 SDK 接入过程中遇到的问题。

注意事项:

  1. 调用自检函数之前必须要先调用registerApp:universalLink接口, 并确认调用成功
  2. 自检过程中会有 Log 产生,可以先调用 startLogByLevel 函数,根据 Log 排查问题
  3. 会多次回调block
  4. 仅用于新接入 SDK 时调试使用,请勿在正式环境的调用

示例代码:

//在 register 之前打开 log , 后续可以根据 log 排查问题
[WXApi startLogByLevel:WXLogLevelDetail logBlock:^(NSString *log) {
    NSLog(@"WeChatSDK: %@", log);
}];

//务必在调用自检函数前注册
[WXApi registerApp:APP_ID universalLink:UNIVERSAL_LINK];

//调用自检函数
[WXApi checkUniversalLinkReady:^(WXULCheckStep step, WXCheckULStepResult* result) {
    NSLog(@"%@, %u, %@, %@", @(step), result.success, result.errorInfo, result.suggestion);
}];

WXULCheckStep值说明:

  1. step = WXULCheckStepParams: 参数检查
  2. step = WXULCheckStepSystemVersion: 当前系统版本检查
  3. step = WXULCheckStepWechatVersion: 微信客户端版本检查
  4. step = WXULCheckStepSDKInnerOperation: 微信 SDK 内部操作检查
  5. step = WXULCheckStepLaunchWechat: App拉起微信检查
  6. step = WXULCheckStepBackToCurrentApp: 由微信返回当前 App 检查
  7. step = WXULCheckStepFinal: 最终检查

会依次回调这7个step,当回调了WXULCheckStepFinal,说明检测通过,SDK接入成功。 任一 step 回调的result.success为 NO , 流程终止,后续不再回调,可以根据result.errorInfo的查看当前步骤错误的原因,根据result.suggestion修复问题.

教育领域全面跨丝,现在还能做教育类app嘛?

教育领域全面跨丝,现在还能做教育类app嘛?

教育行业移动应用制作解决方式完整版

据市场统计,现在国内家庭的教育支出已成为继生活饮食之后的第2大经济支出,而受到互联网推动作用的加持,教育市场份额仍处于持续增长阶段,预计二01五-二0二0年的复合年长率可高达1二%以上,加之国家全面2胎政策的自由,我国每年将新增五00-六00万人口,与此同时将带来的又是一种千亿级消费市场;在“互联网+教育”以及“人口红利”等消费迭代因素引导下,资本市场与诸多教育机构纷纷加大对教育产业新一轮的布局。

移动应用始终是抢占用户的核心阵地

市场份额越大,伴随的竞争也会越发激烈,抢占用户、提高产品主要竞争力是企业在市场可以站稳脚跟的重中之重!
而在互联网+对安卓简易app教育的普惠作用之下,无论是老牌劲旅还是后起之秀纷纷将产品重心转向线上教育,移动应用作为线上产品最便于承载用户与产品的官方,其功能模块与技术实现便是诸多企业研发产品时最为关心的事情!
 

 

据不完全统计,现在已发布的教育类移动应用已多达10万余个,在这些纷繁复杂的应用当中,核心包含如下5类:

 

一.在线教育类 :

在线教育类产品是率先通过移动应用形式打入市场的,主要功能在于提供优秀教育课程,其中以视频居多,虽然无法代替线下课堂的h5转ios学习模式,但内容全面、具备系统化学习模板的移动应用往往在市场中都颇具竞争力。

二.学生解题类 :

此类移动应用现在在业内用户占有率最大,通过技术手段实现了拍照就能搜到问题答案,这大幅提高了移动应用的实用性,且刚需学生群体广泛。

而制作的技术难度在于OCR识别准确率、智能匹配搜题、健全题库资源等,比如单数学这一科,符号就非常多,要准确识别用户想要的内容,想要有过硬的技术支撑。

三.语言学习类 :

随着信息移动化的迅猛增长,碎片化学习的概念得以在此类移动应用中茁壮成长,诸多优秀的产品更为入了用户留存激励的运营逻辑,大大提高了移动应用的日活。

 

四.行业考试类 :

此类移动应用面向特定人群设计,通过视频教学、培训等课程来帮忙助力用户提高考试通过率,由于人群精准,定向性强,产品更应关注自身题库的优化。

 

五.儿童早教类 :

假设说其他教育类移动应用犹如一本知识库h5打包,这么儿童早教类的app则犹如一种充满奇幻乐

趣的游乐园;寓教于乐是产品主要思路,可以让低龄儿童持续产生兴趣就想要在图像、声音以及各种交互上多费心思,这方面国外的app做的比较出色,值得借鉴。

刚需用户口味越来越挑剔

现在业内占有率较高的移动应用根本是用户刚需导向的产品,且很多为商业化运营模式,用户在使用过程中对产品体验越来越挑剔,因此研发之初要有一种清晰的产品架构作为支撑,并严格审视怎么实现的技术手段,下面轻松对功能架构进行介绍:

 

产品功能架构图

 

学习计划功能架构图

积木式API制作备受行业瞩目

从移动应用设计到最终产品上架发布过程中,怎么将规划的架构功能实现,往往是大部分企业更为关注的事情;现在从主流的应用制作方案来说,原生制作或者通过API功能模块组件制作都是不错的选用;配备强大技术团队的公司自然选用原生制作即可,而相比原生来讲,通过积木式API制作实现功能复用的模式,以其研发成本相对较低、上架发布速度较快的优势也赢得了一定认可,但想要注意选用有项目质量保障的官方!
下面笔者列出了通过API搭建移动应用所需的通用模块,企业可依据不同的产品功能需求去进行积木式组合,以满足自身需求。

 

UIUX组件:

核心面向用户UX使用的基础功能,也是在大部分教育类移动应用通用的基础模块,比如用户在复习课程材料时,想要记录时间、查阅标注重点、区别易混淆知识,便会用到日历、翻页、剪切板、柱状图、阅读器、选用器、编辑器、动画等UIUX组件。

功能扩展:

顾名思义,核心用来对产品各种功能的实现进行支持,并对移动端设备的相关硬件进行调取,有些特殊功能会集成第3方SDK插件,比如语音识别模块可能会使用更加成熟的百度、讯飞语音识别技术;

自由服务模块:

为了给用户提供最佳的使用体用,在产品服务层面,大部分API也会接入强大的第3方模块,比如我们通过某电商官方购买商品时,使用第3方微信或支付宝进行付款就是最常见自由模块的应用。

现在我国教育行业发展水平距发达国家尚有一定差距,但也为日后的持续增长提供了空间保障,加之第3次消费结构迭代,教育行业支出仍会伴随GDP增长而持续提高,面对未来的产业变革,信息化推进会带来更多的学习场景、学习方案、课程体系等创新,这么作为技术优化驱动的载体,相信移动应用仍会是市场主流的选用。

教育领域全面跨丝,现在还能做教育类app嘛?

我是iOS App开发人员,就接入移动统计如何本地自测是否接入成功问题,如何形成本地统计数据问题?

我是iOS App开发人员,就接入移动统计如何本地自测是否接入成功问题,如何形成本地统计数据问题?

A:设置enableDebugOn = YES可以在本地看到log的发送,如果发送成功,则接入成功。 也可使用我们的【在线调试】功能,实时查看测试事件与页面的操作行为数据,确认SDK配置状态。 在线调试功能使用说明:https://mtj.baidu.com/web/help/article?id=280&type=0

高德地图API服务的免费调用次数有什么限制?APP接入高德地图

高德地图API服务的免费调用次数有什么限制?APP接入高德地图

高德开放平台提供了基础服务和非基础服务,基础服务如地图、定位、搜索;非基础服务如海外地图服务、ETD、猎鹰等。以下免费配额说明适用于基础服务,非基础服务以您收到的申请结果为准。

“Web服务API”产品有调用次数限制,Android、iOS、JavaScript这些平台已封装的基础服务不限制日配额;

Web服务基础服务针对“不同类型开发者”的调用次数限制详情可参考“流量限制说明”

如何确定Key应该绑定哪种服务? APP开发接入高德导航

如何确定Key应该绑定哪种服务? APP开发接入高德导航

根据业务需求选择Key的服务平台(包括:Android、iOS、Web端、Web服务、智能硬件、微信小程序等),可点击相应平台可使用服务查看详情介绍。

其中Web服务指调用Web服务API接口使用的Key,Web端指PC或者H5网页调用使用的key

注意:Key的服务平台选择之后无法修改,如需要使用其他服务,可以再添加其他服务平台的Key。如下图所示:

卸载免签版应用,桌面长按图标移除,设置里面删除描述文件

一些小伙伴对苹果操作不熟悉,不知道怎么卸载免签版应用;
这里统一说明下卸载免签版应用操作指南

1.在手机桌面找到需要删除的图标,长按图标,会出现删除书签按钮
点击删除书签即可将书签删除

2.在设置-通用-设备管理里面找到对应的描述文件移除

打开苹果手机,点击设置进入,点击通用

如图,进入设备管理,之后找到需要移除的配置文件

点击配置描述文件之后,进去可以有移除按钮

如图,点击移除描述文件

点击移除描述文件之后会叫输入设备密码,输入一下即可

输入密码之后,就会弹出移除确认按钮,再次点击移除按钮,就可以彻底删除了。

如果只是常规删除,可以直接使用方式1;
如果是开发者测试删除,为了清除本机缓存,建议操作方式2;

TRTC 支持哪些平台?

TRTC 支持哪些平台?

支持的平台包括 iOS、Android、Windows(C++)、Windows(C#)、Mac、Web、Electron、微信小程序,更多详情请参见

实时音视频是业界真正实现全平台互通的解决方案,具体平台支持及开发环境要求如下表所示:

平台开发环境要求
iOS支持 iOS 9.0 及以上版本的 iPhone 或 iPad 真机Xcode 9.0+项目已配置有效的开发者签名
AndroidAndroid Studio 3.5+建议使用 Android 4.1(SDK API Level 16)及以上系统
Windows支持 Windows 7 及以上版本Visual Studio 2010及以上版本,推荐使用 Visual Studio 2015.Net Framework 4.0及以上版本
Mac OSXcode 9.0+OS X10.10+ 的 Mac 真机项目已配置有效的开发者签名
Web推荐使用桌面端 Chrome 56+,详细开发环境要求请参见 快速集成(Web)
Electron支持 Windows 7 及以上版本、Mac OS 10.10 及以上版本支持 Electron 4.0.0 以上版本,推荐使用最新版 Electron SDK
微信小程序微信 App iOS 最低版本要求:7.0.9微信 App Android 最低版本要求:7.0.8小程序基础库最低版本要求:2.10.0由于小程序开发者工具不支持原生组件(即 <live-pusher> 和 <live-player> 标签),需要在真机器上运行体验
FlutteriOS 端: 支持 iOS 9.0 及以上版本的 iPhone 或 iPad 真机Xcode 9.0+项目已配置有效的开发者签名 Android 端:Android Studio 3.5+建议使用 Android 4.1(SDK API Level 16)及以上系统

怎么样才能快速的开发一款APP

怎么样才能快速的开发一款APP

随着移动应用软件的普及,越来越多的企业以及个人都加入创建自己的移动应用应用软件,目前我们来分享一下怎么DIY迅速进行App制作软件。

 

市面上有很多DIY App开发工具,它们普遍使用的是拼装式。

这样的开发速度快,不过模型少,自定义效果差,更别提用户体验了。

最关键的一点,最终App不一定能上架发布。

 

使用一门APP官方,用Web语言迅速开发iOS、Android原生App软件。

不止确保了迅速、高效的优势,更利于用户开发出多种多样,个性化强的App。

首先步:注册账号,下载Studio制作工具

打开IDE后依次—文件—新建—创建一门APP项目。

创建完成后在左侧【我的移动应用项目】里面会显示新建的项目,同时登录到网站控制台里面也会看到刚创建的项目。

如下图:

左侧我的移动应用项目里面会显示刚创建的项目及文件,如下图:

这些文件就是移动应用的所有东西了,也就是widget包。

到此一种项目创建完成,修改下index.html(入口文件),连上手机,CTRL+R进行真机调试,会发现手机上出现个移动应用Loader,这里面包含了您调试的所有项目。

再制作过程中能够通过这个来真机调试。

第2步:制作您的首先个移动应用

项目创建完成,调试也做好了,下面就开始制作您的移动应用吧。

如同制作web页面同样,一种HTML文件h5封装ipa然后加上CSS和JS,来实现布局和效果。

CSS文件夹存放您的样式,script来存放您的JS文件,html文件夹存放您的模型文件,index.html为移动应用的入口文件,就是好比个首页了。

我们来了解一下一种移动应用的结构,通用的移动应用布局有顶部导航,中间内容区域和底部导航。

如下图:

在用APICLOUD的移动应用的制作过程中,一种页面的布局方案最好是通过窗口的套用来完成,即win+frame,举个例子来看明,我们在做网站后台的时候为了防止点击菜单页面刷新,我们有时会采用的布局是先做一种大框架,然后通过iframe来嵌套其他页面,然后我们制作的移动应用就好比是一种浏览器,我们能够通过iframe来显示一种页面,也能够在浏览器新窗口打开一种页面。

这么回到我们的移动应用里面,index.html为入口框架,通过openFrame或openFrameGroup来加载其他页面(好比那个iframe了),假设想在新窗口中打开就使用openWin。

为了移动应用更流畅点,我们有时会一种页面嵌套多个frame来实现效果。

再回到上面的移动应用布局图里面分析一下,在index.html我们就只能够布局左右导航,中间内容区域通过openFrame或者openFrameGroup来加载其他页面的方案来实现。

假设是打开一种窗口,通过openWin来打开一种页面,fut web app同理,然后打开的这个窗口里面再通过openFrame或或openFrameGroup来嵌套其他页面。

openWin openFrame为yimenapp的api对象方法,能够参考论坛中的文档来说下使用说明。

下面通过轻松的实例说明一下

index.html—入口

html/frm_list.html

html/win_show.html

html/frm_list.html

index.html

   

   

   

    demo

    顶部导航

    底部菜单

CSS样式就不多说了,跟web是同样的用法,左右导航布局完成后通过js来加载frm_list.html页面,openFrame的其他参数请参考文档

vue封装app
这样打开移动应用后等于我们看到的就是list这个页面了

frm_list.html中打开新窗口

   

   

   

    demo

   

           列表一

   

加个ONCLICK事件,跟web是同样滴

win_show.html的写法,这个页面我们就当个窗口来用,通过frame来加载细致内容页面:

   

   

   

    demo

    内容

这么frm_show.html怎样来写就自己动手写一种了

通过更多的JS和css三动画效果,我们能够让移动应用更丰富些。

流程都熟悉了大家能够上手做个轻松的来试一下。

第3步:移动应用开发注

意几点事项

html五:在创建html时为了防止页面缩放等不兼容效果,要创建个viewport

在IOS设备上,有时会将数字转为手机号,这里也要禁止下

CSS:在定义CSS时记得要定义下默认样式

api.js:为yimenapp打包的js方法,假设使用记得先要引入,在script文件夹内 

通过app制作官方制作app,实现迅速上架发布。

  更多app资讯,请关注www.yimenapp.com

  提交app定制需求,了解报价和时间周期:

  https://app.yimenapp.com/index?uzchannel=五00

【20元付费版】书签显示未签名,付费开通证书版,显示绿色已验证

一门提供苹果书签永久免费创建,免费版永久可用,但是会显示【未签名】
免费版【未签名】演示

20元收费版【系统 Apple 苹果证书签名】演示

如图所示,免费版会显示红色【未签名】
如果不想显示【未签名】可以在后台付费开启SSL证书永久签购买方式

点击【去20元购买Apple永久签】就可以付费开通书签付费版

购买书签付费版之后,页面会自动跳回

如图,勾选【系统 Apple 苹果证书签名】

勾选后,点击生成按钮,就完成了付费版的生成制作
之后扫码,安装即可

温馨提示:
apple证书签名优势,可以显示公司英文,提现公司版权;
显示绿色【已验证】增强用户信任感;

苹果开发者证书的几种类别:上架证书、adhoc证书、测试证书

    苹果上架证书——适用于提交appstore上架审核;
    苹果上架ADHOC测试证书——适用于生产环境的测试安装;
    苹果测试证书——适用于开发环境的测试安装;

苹果上架证书,生产环境证书之一,主要用于提交APP到appstore使用的,如果您的IPA包需要上传到appstore,那么必须制作IOS上架证书打包APP,才能成功将安装包提交市场审核

(图:苹果上架证书)

ADHOC证书主要用于生产环境的最终测试使用,本质上也是用于测试的,只是环境是生产环境!可以简单理解为生产环境的测试证书;

测试证书,开发环境的测试证书,主要用于开发阶段的测试,被广发用于测试IPA!

苹果个人开发者账号申请流程

申请苹果个人开发者账号
1.登录苹果官网,找到苹果开发者中心
https://developer.apple.com/

如图,点击右边上会员中心按钮

2.在苹果开发者中心的登录界面,点击注册按钮

温馨提示:建议您新注册APPleid哦
点击注册appleid跳转到新用户注册页面

根据您个人的真实信息填写
根据页面流程完成appleid的注册

点击提交之后会进入邮箱和手机号验证页面

验证邮箱

验证手机号

之后会跳转到用户协议界面,点击第一个统一按钮,去掉下面的不同意按钮,点击右边下角的继续按钮即可完成注册

到了这个页面已经完成了新的appleid注册成为个人开发者的流程
这一步还没有付费给苹果公司,但是已经能够享受到一些apple开发者的基础权限了

3.正式开始注册成为苹果的个人开发者账号

点击页面底部的加入开发者计划
页面会自动跳转到开发者介绍页面
你可以在这里了解苹果开发者的一些常规介绍

在导航栏的右侧有一个加入按钮【ENROLL】
点击进入正式的申请流程

4.选择个人开发者计划,进行下一步

点击底部的继续按钮

会跳转到下一步
游客,如果您要查看本帖隐藏内容请回复

游客,如果您要查看本帖隐藏内容请回复
好吧!以上教程都可以跳过
游客,如果您要查看本帖隐藏内容请回复
使用新的 Apple Developer app 注册。
使用新的 Apple Developer app 注册。
2020年新版苹果个人开发者账号注册流程
第一步:首先用一部苹果手机,在APPstore里面搜索【Apple Developer】
好的,打开苹果手机或平板

点击appstore

搜索Apple Developer并安装好,之后点击打开

登录或者新注册
——我们这里是新注册苹果开发者账号,所以要选择【现在注册】
点击之后会弹出界面

选择登录了【设置】的appleid,或者选择登录一个其他的appleid
——这里我们已经把在PC端注册的appleid登录了【设置】,所以直接选择登录

点击继续按钮

点击底部继续按钮

在页面输入中文,之后点击右边上【下一步】继续
姓氏
名字
身份证号码
手机号
——中文输入即可,根据个人信息真实填写

进行拍照进行人脸识别
拍照的时候请注意一定把自己拍清楚,脸部拍全,之后点击提交

提交根据本地网络环境,有时候很快,有时候要等一段时间
提交成功之后,页面会自动跳转

这里的信息需要输入英文字符,不会英文,您可以输入拼音pinyin

全拼音,之后点击继续

选择注册苹果开发者账号类型
我们这里注册的是个人,那就直接选择第一个

点击继续按钮

点击同意注册协议

点击同意继续

付费688元年费给苹果公司
付费成功之后您的苹果个人开发者账号就注册完成了
您的邮箱就会收到欢迎加入的邮件通知

苹果重要的事项都会通过邮件来通知哦!
请养成关注苹果邮件的好习惯拉!