Liferay Push for iOS
设置
将库Pod添加到您的应用程序的Podfile中
target '<your-application>' do
use_frameworks!
pod 'Liferay-Push'
// Other pods
end
示例应用程序
与库一起,在这个仓库中您有一个示例,您可以在这里看到一个如何使用此库的例子。
用法
配置服务器以发送推送通知
首先,您需要配置您的服务器,使其能够发送推送通知。
生成iOS APN证书
-
前往您的 Apple开发者账号
-
为您应用创建一个新的证书(输入应用名称、Bundle ID)并选择推送通知。为此,您需要使用Keychain应用程序创建一个证书请求。
-
下载生成的 .cert 文件并将其安装到 Keychain 中。
-
使用相同的App将证书导出为 .p12 文件。
在服务器上安装证书
一旦您有了 .p12 文件,下一步将是将此证书放入服务器。首先,您需要将证书保存到服务器所在计算机上。
7.1
完成此操作后,使用浏览器登录到服务器并转到控制面板
-> 配置
-> 系统设置
-> 通知
并选择Apple
系统范围。
您将看到类似的屏幕
7.0
完成此操作后,使用浏览器登录到服务器并转到配置
-> 系统设置
,查找Apple Push Notification发送者
。
您将看到类似的屏幕
- 在第一个字段中,您必须添加您在导出证书时设置的密码。
- 在第二个字段中,您必须添加证书所在的路径。
- 最后一个字段是一个复选框,当您使用开发证书时必须启用它。
配置应用程序以接收推送通知
启用应用中的推送通知
为了让您应用能够接收推送通知,您需要启用以下功能:
- 后台模式 -> 远程通知。
- 推送通知。
注册设备令牌
为了接收推送通知,您的应用必须首先在门户上注册自身。在门户端,每个设备都与一个用户相关联。每个用户可以有多个已注册的设备。设备由设备令牌字符串表示。
注册设备
为了接收推送通知,您的应用必须首先在门户上注册自身。在门户端,每个设备都与一个用户相关联。每个用户可以有多个已注册的设备。设备由设备令牌字符串表示。
阅读苹果官方文档以了解如何获取设备令牌。这篇教程也十分有用,可以帮助您了解苹果推送通知的工作原理。
一旦您拥有设备令牌,您可以通过调用
#import "Push.h"
LRSession *session = [[LRSession alloc] initWithServer:@"https://:8080" username:@"[email protected]" password:@"test"];
[[Push withSession:session] registerTokenData:deviceToken];
import LRPush
LRPush.withSession(session)
.registerDeviceTokenData(deviceToken)
现在每当门户需要向用户[email protected]
发送推送通知时,它会查找所有已注册的设备(包括刚刚注册的设备),并为找到的每个deviceToken
发送推送通知。
由于所有操作都是异步的,您可以为检查注册是否成功或在服务器端发生错误设置回调函数
[[[[Push withSession:self.session]
onSuccess:^(NSDictionary *device) {
NSLog(@"Device was registered!");
}]
onFailure:^(NSError *e) {
NSLog(@"Some error occurred!");
}]
registerTokenData:deviceToken];
import LRPush
LRPush.withSession(session)
.withPortalVersion(70)
.onSuccess {
print("Success: \(String(describing: $0))")
}
.onFailure {
print("Error \(String(describing: $0))")
}
.registerDeviceTokenData(deviceToken)
onSuccess
和onFailure
块是可选的,但实现两者是良好的实践。通过这样做,您的应用可以持久化设备令牌或告知用户发生了错误。
一旦您的设备注册成功,您的应用必须能够监听通知。苹果开发者文档展示了如何在您的应用中实现这一点。
发送推送通知
从Liferay Portal发送推送通知有多种方法。有关详细信息,请参阅Liferay Push文档。或者,您也可以从iOS应用程序发送推送通知。只需确保用户在门户中拥有发送推送通知的正确权限即可。
NSDictionary notification = @{
@"body": @"hello!"
};
[[Push withSession:session] sendToUserId:123 notification:notification];
let notification: [String: AnyObject] = [
"body": "hello!" as AnyObject
]
Push.withSession(session).sendToUserId(123, notification:notification)
在此代码中,推送通知是通过sendToUserId
指定的用户发送的。在接收到通知后,门户查找所有用户注册的设备(包括Android和iOS设备),并将notification
作为推送通知的消息体发送。
注销设备
如果您想停止在设备上接收推送通知,可以使用以下代码从门户注销它。
[[Push withSession:session] unregisterToken:deviceToken];
Push.withSession(session).unregisterToken(deviceToken)
用户只能注销他们拥有的设备。
测试推送通知
Liferay有一个用于执行测试发送推送通知的小部件。在登录到门户后,请转到配置 -> 推送通知。您将看到如下屏幕:
如果您想要发送推送通知以进行测试,必须在消息文本字段中输入推送通知的内容。请注意,它必须是一个正确的json,例如:{"body": "推送通知内容"}
重要说明
如果想要使用此方法进行测试,您必须知道如果您想正确地在iOS设备上接收推送通知,则需要某些密钥。传递给推送小部件的消息不是发送到APN的最终消息。Liferay推送小部件旨在平台无关性,因此最终消息遵循以下约束:
-
您在json中放置的所有值,键名不是保留的,都将发送到最终消息中的
payload
键下。例如:{"myKey": "myValue"}
将被转换为{"apn": {}, "payload": {"myKey": "myValue"}}
。 -
将
body
键转换为alert并放在apn键中。例如:{"body": "我的推送内容"}
将转换为{"apn": {"alert": "我的推送内容"}}
。(如果您想显示视觉通知,添加此键是必需的
) -
带真值的silent键将转换为content-available并放在apn键中。例如:
{"silent": true}
将转换为{"apn": {"content-available": 1}}
。(如果您想发送静默通知,添加此键是必需的
) -
sound键将放在apn键中。例如:
{"sound": "default"}
将转换为{"apn": {"sound": "default"}}
。 -
徽章键将位于APN键内部。例如
{"badge": 1}
将转换为{"apn": {"badge": 1}}
。(如果您想发送静默通知,则新增此键是必须的)