• 解决iOS推送无法获取DeviceToken小记


    通过推送后台查看到 线上还没有有效设备,意思就是没有注册设备。 则集成可能少了步骤,需重新查看小米推送的集成文档。或是出现xcode本身的参数配置错误:

     https://dev.mi.com/console/doc/detail?pId=98

    2.3. 配置SDK运行参数

    运行SDK注册小米推送服务的时候,需要使用AppID,AppKey,等参数来验证使用者的合法性。

    1. 打开工程下资源文件Info.plist
    2. 文件为源代码形式打开,添加以下信息
      <dict>
      	<key>MiSDKAppID</key>
      	<string>1000888</string>
      	<key>MiSDKAppKey</key>
      	<string>500088888888</string>
      	<key>MiSDKRun</key>
      	<string>Online</string>
      </dict>
    3. 如果开发版本较多,修改连接环境比较繁琐,提供以下方式。
      !--请注意MiSDKRun写法, 用buildSetting里面的宏替换--
      <dict>
      	<key>MiSDKAppID</key>
      	<string>1000888</string>
      	<key>MiSDKAppKey</key>
      	<string>500088888888</string>
      	<key>MiSDKRun</key>
      	<string>${MiSDKRun}</string>
      </dict>
      其中在Build Settings中添加添加宏MiSDKRun的方法为:

    1. MiSDKAppID, MiSDKAppKey 为在小米开发者网站http://developer.xiaomi.com,注册App后的AppID,AppKey。MiSDKRun 是设定SDK是连接Development环境/Distribution环境 对应参数为debug/online

    ####################### xcode参数错误 #########################################

    一天又一天,淹没在无穷无尽剪不断理还乱的业务线,时不时出来跑下脚本,打打各种环境的包。
    最近在联调push的时候,又碰上一些奇怪的问题,一番拉扯,终于搞定,特此记录。

    错误信息

    NSError(NSCocoaErrorDomain:3000) 未找到应用程序的“aps-environment”的授权字符串

    尝试解决

    1、打开 Capabilites -> Push Notifications 开关属性为 ON (确认已打开)。

    2、删除本地 profile 文件,重新download,无效。

    3、Command+shift+K 清空Xcode缓存,无效。

    4、Build Setting 搜索 code sign

    观察 Code Signing Entitlements ,确认值为 entitlements 文件正确路径。
    观察 Code Signing Identity,不同环境对应不同打包证书,开发环境对应开发证书,正式环境对应生产证书,确认是ok的。

    5、stackoverflow 上看到这么一条挺心动的,大概意思是这么说的,确保你的 profile 文件生成在推送证书生成之后。于是重新生成了一波,无效。

    APNs Development iOS 开发环境推送证书
    Apple Push Services 生产环境推送证书

    额,到这里,似乎有点山穷水尽了啊,不行,殊死一搏

    1
    删除mac钥匙串中心所有关于项目的证书,包括开发证书,生产证书,开发推送证书,生产推送证书等等。

    重启,重新应用,重新打包,然后,居然…竟然…特么的好了!!!Are you fucking kidding me?!!

    四种打包模式的区别

    1. Save for iOS App Store Deployment
      保存到本地 准备上传App Store 或者在越狱的iOS设备上使用

    2. Save for Ad Hoc Deployment
      苹果的官方解释是:To distribute your app to users with designated devices, select “Save for Ad Hoc Deployment.” The app will be code signed with the distribution certificate.(保存到本地 准备在账号添加的可使用设备上使用(具体为在开发者账户下添加可用设备的udid),该app包是发布证书编译的)

    3. Save for Enterprise Deployment 生成企业包
      这种主要针对企业级账户下 准备本地服务器分发的app,也可直接发给你的客户或测试人员安装,无需在帐号中添加设备的udid。注意:此证书为299$的企业证书

    4. Save for Development Deployment
      苹果的官方解释是:To distribute your app for internal testing, select “Save for Development Deployment.” The app will be code signed with your development certificate. (针对内部测试使用,主要给开发者的设备(具体也为在开发者账户下添加可用设备的udid)。该app包是开发证书编译的)

    至于 Save for Ad Hoc Deployment 和 Save for Development Deployment两个选项的区别,官方给出的解释是证书的区别,但是对于我们来说,还不是特别清楚具体的用处。其实最早当我们选择Save for Ad Hoc Deployment来生成ipa包的时候,我们是可以选择开发证书的,但是现在,它需要我们使用发布证书。我们最早在做程序真机测试的时候,大部分时候是用的开发证书,并没有发布证书,所有我认为,Save for Development Deployment是我们前期用开发证书,给测试人员发包测试的时候使用的,而到程序开发的后期,我们为了发布,生成了发布证书,此时,我们给client或者tester的时候,应该选择Save for Ad Hoc Deployment,使用发布证书打包, 而官方对Ad Hoc的解释是:Ad Hoc模式的包,和将来发布到App Store的包在各种功能测试上是一样的,只要Ad Hoc模式下测试(推送,内购等)没有问题,发布到App Store也是没有问题的。

    entitlements文件

    Xcode8之后,我们如果需要打开推送功能,必不可少的一步就是打开 Capabilites -> Push Notifications 开关属性为 ON,细心的同学就会发现,Xcode为我们自动生成了一个 xxx.entitlements文件,xxx是我们的项目名称,打开这个文件,里面只有一对键值对如下

    1
    APS Environment: development

    这个有什么作用呢?

    我们此时Archive出一个ipa包来,右键解压并查看包内容,会发现一个embedded.mobileprovision,里面放的是各种PP文件属性,包括关于项目的一些权限字段和功能开关,其中,我们要关注的则是 aps-environment 这个字段,这个字段的值真正决定我们打出来的包是正式环境的push还是开发环境的push,值为 development 代表开发环境push,distribution 代表正式环境的push。

    然而,经过测试,无论我们如何修改上面生成的 xxx.entitlements 文件中 APS Environment 的值,打出来的包内容 embedded.mobileprovision 中 aps-environment始终为 development,这是为什么呢?

    经过本人亲自反复多次测试,我们手动修改 xxx.entitlements 的 APS Environment 是没有用的,因为Xcode打包会自动帮我们修改 APS Environment 的值,而这个值只取决于我们的打包方式, 即使我们把 APS Environment 的值改成 abc 都没有关系。

    打包方式最终实际 aps-environment
    Save for iOS App Store Deployment distribution
    Save for Ad Hoc Deployment distribution
    Save for Enterprise Deployment 尚未测试
    Save for Development Deployment development

    所以,我们得出一个结论,使用 firim 或者 蒲公英 分发平台给测试push发包的时候,就需要选择正确的打包模式,否则后端调起的推送证书是开发环境还是生产环境将直接影响我们app是否会受到推送。

    校验正式环境的push功能,选择 ad-hoc 模式打包。

    校验测试环境的push功能,选择 Development Deployment 模式打包。

    小彩蛋

    如何查看 embedded.mobileprovision 文件内容?

    方法一:直接在Finder左键选中该文件,修改Finder查看方式为图标、列表、分栏或封面流方式显示项目(默认从左往右第三个查看方式),那么我们就会在右边封面流看到文件内容了。

    方法二:cd到该文件目录下,使用命令 security cms -D -i embedded.mobileprovision 即可查看。

  • 相关阅读:
    团队介绍与选题报告
    实验6:开源控制器实践——RYU
    二叉搜索树的2层结点统计 (25 分)
    2020团队程学设计天梯赛-总决赛
    口罩发放 (25 分)
    九宫格输入法
    检查密码
    暑期训练10-1010
    暑期训练09-1003
    数据结构之循环队列
  • 原文地址:https://www.cnblogs.com/vana/p/13469100.html
Copyright © 2020-2023  润新知