restoreTransactions 恢复用户以前购买过的所有商品交易 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

restoreTransactions 恢复用户以前购买过的所有商品交易 APP开发实现苹果内购IOS内购开发教程

请在 setTransanctionListener 中接收交易数据

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

jsBridge.iap.restoreTransactions();

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.restoreTransactions();

}
</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.restoreTransactions();

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

setTransanctionListener 设置交易监听器 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

setTransanctionListener 设置交易监听器 APP开发接入苹果内购IOS内购开发教程

• 调用 getUnfinishedTransactions/purchase/restoreTransactions/finishTransaction 方法之前应设置本监听器,所有交易状态变更都会通知到此监听器。

• 系统以数组形式将交易信息传递给回调参数 transactions

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

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

jsBridge.iap.setTransanctionListener(function(succ, transactions) {
  if (succ) {
    var json = JSON.stringify(transactions);
    jsBridge.setClipboardText(json);
    //transactions.forEach(function(x){jsBridge.iap.finishTransaction({transactionId: x.transactionId});})
    alert(json);
  } else {
    alert("操作失败\n" + JSON.stringify(transactions));
  }
});
alert("已设置监听器");

/**
transactions 返回交易信息数组
[{
  state:                 //交易状态,详见交易状态常量,数字类型    
  transactionId:         //交易id,字符串类型    
  originalTransactionId: //原始交易id,只在state为恢复购买时有效,字符串类型
  transactionDate:       //交易时间,UNIX 时间戳(秒)
  receipt:               //交易凭证,经过base64编码,用于验证交易是否合法和有效,避免因越狱破解内购后造成损失,只在state为购买成功时有效,字符串类型
  errorCode:             //交易失败时的错误码,数字类型    
  errorMsg:              //交易失败时的说明,字符串类型    
  payment:               //商品购买信息
  {
    productId:           //商品ID,字符串类型
    quantity:            //购买数量,数字类型
    applicationUsername: //用户信息,字符串类型
  },
  downloads:             //有下载内容时的下载信息列表
  [{    
    state:               //下载状态,详见下载状态常量,数字类型
    transactionId:       //下载内容所属交易id,字符串类型
    contentId:           //下载内容id,字符串类型
    progress:            //下载进度,取值范围0~1,数字类型
    contentLength:       //文件内容大小,数字类型
    timeRemaining:       //下载剩余时间,-1时表示未知,数字类型
    contentVersion:      //下载内容的版本,字符串类型
    contentURL:          //下载成功后文件路径,字符串类型
    errorCode:           //下载失败时的错误码,数字类型
    errorMsg:            //下载失败时的错误描述,字符串类型
  }]
}]

state(transaction) 交易状态常量说明
0: 已加入交易队列(Transaction is being added to the server queue.)
1: 交易完成(Transaction is in queue, user has been charged.  Client should complete the transaction.)
2: 交易失败(Transaction was cancelled or failed before being added to the server queue.)
3: 恢复购买(Transaction was restored from user's purchase history.  Client should complete the transaction.)
4: 交易等待被确认(The transaction is in the queue, but its final status is pending external action.)
    
state(download) 下载状态常量说明
0: 等待下载(Download is inactive, waiting to be downloaded)
1: 正在下载(Download is actively downloading)
2: 暂停下载(Download was paused by the user)
3: 下载完成(Download is finished, content is available)
4: 下载失败(Download failed)
5: 取消下载(Download was cancelled)

**/

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.setTransanctionListener(function(succ, transactions) {
  if (succ) {
    var json = JSON.stringify(transactions);
    jsBridge.setClipboardText(json);
    //transactions.forEach(function(x){jsBridge.iap.finishTransaction({transactionId: x.transactionId});})
    alert(json);
  } else {
    alert("操作失败\n" + JSON.stringify(transactions));
  }
});
alert("已设置监听器");

/**
transactions 返回交易信息数组
[{
  state:                 //交易状态,详见交易状态常量,数字类型    
  transactionId:         //交易id,字符串类型    
  originalTransactionId: //原始交易id,只在state为恢复购买时有效,字符串类型
  transactionDate:       //交易时间,UNIX 时间戳(秒)
  receipt:               //交易凭证,经过base64编码,用于验证交易是否合法和有效,避免因越狱破解内购后造成损失,只在state为购买成功时有效,字符串类型
  errorCode:             //交易失败时的错误码,数字类型    
  errorMsg:              //交易失败时的说明,字符串类型    
  payment:               //商品购买信息
  {
    productId:           //商品ID,字符串类型
    quantity:            //购买数量,数字类型
    applicationUsername: //用户信息,字符串类型
  },
  downloads:             //有下载内容时的下载信息列表
  [{    
    state:               //下载状态,详见下载状态常量,数字类型
    transactionId:       //下载内容所属交易id,字符串类型
    contentId:           //下载内容id,字符串类型
    progress:            //下载进度,取值范围0~1,数字类型
    contentLength:       //文件内容大小,数字类型
    timeRemaining:       //下载剩余时间,-1时表示未知,数字类型
    contentVersion:      //下载内容的版本,字符串类型
    contentURL:          //下载成功后文件路径,字符串类型
    errorCode:           //下载失败时的错误码,数字类型
    errorMsg:            //下载失败时的错误描述,字符串类型
  }]
}]

state(transaction) 交易状态常量说明
0: 已加入交易队列(Transaction is being added to the server queue.)
1: 交易完成(Transaction is in queue, user has been charged.  Client should complete the transaction.)
2: 交易失败(Transaction was cancelled or failed before being added to the server queue.)
3: 恢复购买(Transaction was restored from user's purchase history.  Client should complete the transaction.)
4: 交易等待被确认(The transaction is in the queue, but its final status is pending external action.)
    
state(download) 下载状态常量说明
0: 等待下载(Download is inactive, waiting to be downloaded)
1: 正在下载(Download is actively downloading)
2: 暂停下载(Download was paused by the user)
3: 下载完成(Download is finished, content is available)
4: 下载失败(Download failed)
5: 取消下载(Download was cancelled)

**/

}
</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.setTransanctionListener(function(succ, transactions) {
  if (succ) {
    var json = JSON.stringify(transactions);
    jsBridge.setClipboardText(json);
    //transactions.forEach(function(x){jsBridge.iap.finishTransaction({transactionId: x.transactionId});})
    alert(json);
  } else {
    alert("操作失败\n" + JSON.stringify(transactions));
  }
});
alert("已设置监听器");

/**
transactions 返回交易信息数组
[{
  state:                 //交易状态,详见交易状态常量,数字类型    
  transactionId:         //交易id,字符串类型    
  originalTransactionId: //原始交易id,只在state为恢复购买时有效,字符串类型
  transactionDate:       //交易时间,UNIX 时间戳(秒)
  receipt:               //交易凭证,经过base64编码,用于验证交易是否合法和有效,避免因越狱破解内购后造成损失,只在state为购买成功时有效,字符串类型
  errorCode:             //交易失败时的错误码,数字类型    
  errorMsg:              //交易失败时的说明,字符串类型    
  payment:               //商品购买信息
  {
    productId:           //商品ID,字符串类型
    quantity:            //购买数量,数字类型
    applicationUsername: //用户信息,字符串类型
  },
  downloads:             //有下载内容时的下载信息列表
  [{    
    state:               //下载状态,详见下载状态常量,数字类型
    transactionId:       //下载内容所属交易id,字符串类型
    contentId:           //下载内容id,字符串类型
    progress:            //下载进度,取值范围0~1,数字类型
    contentLength:       //文件内容大小,数字类型
    timeRemaining:       //下载剩余时间,-1时表示未知,数字类型
    contentVersion:      //下载内容的版本,字符串类型
    contentURL:          //下载成功后文件路径,字符串类型
    errorCode:           //下载失败时的错误码,数字类型
    errorMsg:            //下载失败时的错误描述,字符串类型
  }]
}]

state(transaction) 交易状态常量说明
0: 已加入交易队列(Transaction is being added to the server queue.)
1: 交易完成(Transaction is in queue, user has been charged.  Client should complete the transaction.)
2: 交易失败(Transaction was cancelled or failed before being added to the server queue.)
3: 恢复购买(Transaction was restored from user's purchase history.  Client should complete the transaction.)
4: 交易等待被确认(The transaction is in the queue, but its final status is pending external action.)
    
state(download) 下载状态常量说明
0: 等待下载(Download is inactive, waiting to be downloaded)
1: 正在下载(Download is actively downloading)
2: 暂停下载(Download was paused by the user)
3: 下载完成(Download is finished, content is available)
4: 下载失败(Download failed)
5: 取消下载(Download was cancelled)

**/

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

canMakePayments 检查当前设备是否支持内购 APP开发接入苹果内购教程

♦ 苹果官方文档 https://developer.apple.com/documentation/appstorereceipts/verifyreceipt

♦ 沙盒凭证验证接口 https://sandbox.itunes.apple.com/verifyReceipt

♦ 生产环境凭证验证接口 https://buy.itunes.apple.com/verifyReceipt

♦ 注意,APP上架审核时苹果审核员用的是沙盒账户;

♦ 识别沙盒环境下收据的方法有两种:
1.根据凭证验证返回的字段 environment = sandbox。
2.根据凭证验证返回的状态码,如果 status = 21007,则表示当前的收据为沙盒环境下凭证;

♦ 构造JSON { “receipt-data” : “(receipt 支付凭证)” } POST 到苹果的验证接口,处理返回结果即可。

用做网页的技术做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

canMakePayments 检查当前设备是否支持内购 APP开发接入苹果内购教程

可能由于家长控制等原因,当前设备不支持APP内购买,在发起内购前可以先判断是否支持。

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

jsBridge.iap.canMakePayments(function(yes) {
  alert(yes ? "支持内购" : "不支持内购");
});

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.canMakePayments(function(yes) {
  alert(yes ? "支持内购" : "不支持内购");
});

}
</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.canMakePayments(function(yes) {
  alert(yes ? "支持内购" : "不支持内购");
});

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

宠物服务预约移动应用制作具有什麽发展前景

在养宠物方面,假设宠物出现一些症状或者是想要进行体检等等环节的话,想必作为主人都会特别关注,针对用户关于养宠物的多方面需求,宠物服务预约移动应用制作能够提供便捷服务。

一、宠物服务预约移动应用制作能够实现哪些功能?
宠物服务预约移动应用制作能够实现的功能包括:官方订单数据信息汇总、宠物服务在线展示、便捷式预约渠道以及宠物电商官方等等功能。
2、宠物服务预约移动应用制作具有什麽发展前景?
1、喜欢养宠物的人数正在逐年增加
养宠物可能在过往只是少部分人的喜欢,并且通常都是不如何喜欢在宠物上花心思,但是随着当前各类宠物频繁出目前短视频或者是其他的社交官方上,例如猫猫狗狗等等宠物的可爱外表以及呆萌动作等等就吸引了很多人对官方进行选用,使得喜欢养宠物的人数正在逐年增加,这一样为宠物服务预约移动应用制作的流行提供了更多的市场商机,让官方能够具有更广泛的发展前景。
二、方便官方利用网络传播进行宣传工作
以宠物服务预约移动应用制作为基础,可以建立一种便捷的互联网宣传官方,让有想要的相关宠物服务的用户能够通过官方来对各类服务进行了解查看。并且现在信息传播的方案还是以及移动端为核心,正好宠物服务预约移动应用软件能够实现信息汇总,让用户只想要平时生活中利用碎片化的时间来进行查看就能够完成,更为具有便捷性。
三、推动宠物服务行业的转型迭代
对于整个官方来看,宠物服务预约移动应用制作能够进行多方面的优化迭代,让管理者可以围绕着官方来实现各方面业务的转型迭代方式。不论是针对订单上的完善还是针对官方各类业务服务的迭代优化等等都具有显著的效果。官方内部的管理以及完善是很有必要的,正好能够通过宠物服务预约移动应用制作建立一种便捷的终端官方来满足管理者操作上的便捷性需求。

伴随着养宠物的趋势日益获取,宠物服务预约移动应用制作也开始受到关注,并结合线上终端官方的优势带给用户更多的功能板块。

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

申请苹果个人开发者账号
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元年费给苹果公司
付费成功之后您的苹果个人开发者账号就注册完成了
您的邮箱就会收到欢迎加入的邮件通知

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

苹果因appstore不允许app使用三方支付又被荷兰政府罚款了

appstore是苹果官方唯一的应用商店,苹果APP的安装必须通过appstore才可以分发,所有苹果的app开发者开发的APP如果要给苹果手机用户安装使用,都需要上架到appstore,这是唯一的分发途经,当然如果您手机设备越狱或使用测试灰度安装才可以绕过appstore。

但正常情况下,普通用户不会越狱手机设备,也搞不懂开发阶段繁琐的安装方式,运营者如果要顺畅的分发自己的苹果APP,唯一且有效的途经就是apple官方的appstore。APP开发好之后上架appstore是非常有必要的选择。

(图:苹果appstore)

经过这么十几年的累积,appstore已经成为苹果公司绝对的核心业务,并且由于ios生态的封闭性,在苹果生态内,appstore就是垄断的,因为他本身就是封闭的,不对外开放的。

但随着苹果公司针对appstore内涉及虚拟支付的app进行强制性抽佣,也就是苹果IOS内购抽成,一般APP高达30%的苹果抽成,确实让很多三方公司觉得肉痛。越来越多的人认为苹果公司所提供的服务已经不再是他自己公司的事情,在国际化越来越加快的今天,appstore应该是全球的,是世界所有人的,appstore不再只是苹果公司的,appstore应该有更多的社会属性。

也许人们已经忘记了appstore本来就是封闭的,苹果一直是逐利的。

现在荷兰政府与apple公司直接主要围绕着appstore抽佣进行谈判,但这已经是连续第N次被荷兰政府罚款,事情明确,在荷兰的iOS生态内,apple已经实现了实质性的垄断。

荷兰政府有充足的理由说明苹果公司的垄断性质,因为apple本来就是封闭的,唯一的。

这可能也是国际化公司需要面临的区域性地方问题,国际化公司应该遵循当地法律法规,如何和当地区域内的势力达成某种利益平衡,可能是所有跨国公司都应该学习的课程。

(图:apple)

很显然,appel公司和荷兰之间的谈判还会持续一段时间,虽然又被罚款了500万欧元,但这点费用对于apple来说根本无关轻重。apple也不会对appstore的分佣策略做出妥协,因为这牵一发动全身,给荷兰APP使用三方支付,那么全球都得使用!

巨头影视版权之争?苹果apple TV禁止谷歌安卓用户购买apple TV内容

近日国外苹果公司宣布旗下apple TV全面禁止在谷歌平台上进行内容分发,具体表现为apple Tv内容从谷歌TV和安卓TV上全面下架,也就是说Android TV 和 Google TV的用户将无法再在本平台便捷的购买apple TV上的节目和内容。

(图:apple Tv)

apple tv一直是国际上非常重量级的音视频影视音乐版权分发渠道,他基本上掌握着全球非常多核心的文化娱乐版权,能够与之抗衡的也就是谷歌,以前apple TV的内容可以在Android TV 和 Google TV上直接进行购买,苹果和谷歌两家公司也有着内部的分佣分发分成协议。这一次的合作破裂,在外界看来可以代表着两家公司开始了内容版权交火。

(图:Android TV)

当然也可能只是暂时的停止合作,也许只是分佣比列两个大佬没有谈好。

这一骚操作可以说苦逼了国外的观众,以前通过Android TV 和 Google TV就可以快捷购买到apple Tv上的内容,现在只能更换设备硬件,在苹果设备上,直接进入apple Tv才可以购买内容观看。

(图:Google TV)

如果没有苹果设备,还没办法观看之前的内容视频了,这无疑加大了普通消费者的使用成本。可以说巨头之间的策略,最后苦逼了的还是普通人。当然也有人表示这是苹果的深谋远虑,及时的构筑好自己的内容生态护城河。

为何这么说呢?

这几年其实可以看到安卓手机厂商的硬件,已经和苹果硬件的技术水平相差无几,再过几年,可能苹果硬件的技术优势会被逐渐的柔化或者消失。除开硬件方面的创新不足,产品疲惫,软件方面谷歌也是拼着老命不停的优化系统。可以看到这几年的谷歌安卓系统,完全是快马加鞭,一马当前,玩着命的更新,系统级的更新从安卓8910到11,到12,现在安卓13,软件方面的体验已经和苹果IOS系统差别不大。

可以想象当硬件优势和软件优势都不明显的情况下,普通消费者的选择性就不会那么的明确和坚定,再在其他厂家设备价格优势下,可能会流失很多用户。

如果到那时候苹果就很恼火了,那么为了应对可能出现的极端情况,提前几年部署一下生态防火墙,加筑几道版权护城河是非常有必要的。

话说回来,这什么apple TV、Google TV、Android TV在咋们内地都是不容许的,未取得前置许可证的,所以与内地消费者无关,大家一起坐着吃瓜!