如果我是多个 iOS应用的Apple推送通知"提供商",我可以为多个应用使用相同的设备令牌吗?我知道我需要为每个应用程序提供唯一的SSL证书.但是我对设备令牌感到困惑.
示例:我有两个应用程序A和B.我想为这两个应用程序提供推送通知.假设我从安装应用程序A的用户收集设备令牌T.假设我为这两个应用程序提供了唯一的SSL证书.当同一个用户安装应用B时,我可以在为应用B提供推送通知时重新使用令牌T吗?
更多信息:在重新阅读Apple的文档后,它仍然不清楚.特别是这一段似乎意味着可以重用设备令牌:
提供商发送给APN以便传送到设备的每个通知都必须附带从该设备上的应用程序获得的设备令牌.APN使用令牌密钥解密令牌,从而确保通知有效.然后,它使用设备令牌中包含的设备ID来确定通知的目标设备.
注意:听起来像每个应用程序的提供商SSL证书中包含的"topic"/ bundleID会将通知定向到设备上的特定应用程序.因此,设备令牌对于设备而言是独一无二的(而不是设备上的应用程序)似乎是合理的.
我想只向某些用户发送推送通知.
从我在Apple文档中经历的内容.注册推送通知的代码是这样的
- (void)applicationDidFinishLaunching:(UIApplication *)app {
// other setup tasks here....
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
}
// Delegation methods
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken {
const void *devTokenBytes = [devToken bytes];
self.registered = YES;
[self sendProviderDeviceToken:devTokenBytes]; // custom method
}
- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {
NSLog(@"Error in registration. Error: %@", err);
}
Run Code Online (Sandbox Code Playgroud)
在方法appdidRegisterForRemoteNotif..我只看到创建的devToken字节并发送到服务器..但我如何识别哪个设备令牌属于哪个用户.所以,如果我的设备名称是Shubhank的iPhone.如何发送我的iPhone是这样的信息,这是我的设备令牌.
不知道为什么......但我以前功能的推送通知注册回调是返回一个奇怪的设备令牌.任何人都可以帮助理解吗?据我所知,我没有更改任何有关此过程的代码.
以下代码:
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken
{
NSLog(@"device token: %@", [devToken description]);
}
Run Code Online (Sandbox Code Playgroud)
返回此输出:
device token: [32]: 8d 21:! 30:0 c3 ec 69:i f4 <--REDACTED--> 24:$ d5 26:& 64:d fb 27:' 79:y fc dc 10 ae 77:w b0 21:! 5b:[
Run Code Online (Sandbox Code Playgroud)
有没有人认识到这种格式或者知道发生了什么?
更新奇怪的是,似乎我的设备令牌实际上包含在[devToken description]我提取每个:和跟随它的字符....并且我猜这[32]:只是字符串长度的指示器.我仍然找不到任何理由.
重新提问:[NSData description]输出格式是否改变?
好的,所以我在 iOS 中编写了这个应用程序。很好地获得了推送通知。我只有一个问题。我是否明智地在用户登录时存储用户设备令牌并在他们注销时删除它,或者永远保留它并且基本上只在用户登录时更新它。
我想我正在寻求的是.. 存储和更新设备令牌的最佳实践。
我的主要问题是……当用户注销时……他们不希望不再收到推送通知。facebook 如何处理这个问题?根据我的理解,如果我通过 FB 应用程序退出我的 FB 帐户。它不再向我发送通知,我说得对吗?我不是一个大 FB 用户哈哈
我正在尝试获取设备的令牌.想到这个:
ParseInstallation parseInstallation = new ParseInstallation();
String deviceToken = (String) parseInstallation.get("deviceToken");
Run Code Online (Sandbox Code Playgroud)
会做的伎俩,但它没有,它返回null.为什么?
嗨,在我的应用程序中我正在获取设备令牌,我正在传递给我的服务器现在发送通知我想发送个人通知我需要获取设备令牌表格我UIViewController请告诉是否有任何可能获取设备令牌形成Appdelegate或来自UIViewController
我在中获取设备令牌的代码 Appdelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeNone)];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
设备令牌.
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
const char* data = [deviceToken bytes];
NSMutableString * token = [NSMutableString string];
for (int i = 0; i < [deviceToken length]; i++) {
[token appendFormat:@"%02.2hhX", data[i]];
}
NSString *urlString = [NSString stringWithFormat:@"url?token=%@",token];
NSURL *url = [[NSURL alloc] initWithString:urlString];
NSLog(@"token %@",urlString);
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
NSLog(@"request %@ ",urlRequest);
NSData *urlData; …Run Code Online (Sandbox Code Playgroud) 我正在处理推送通知.我编写了以下代码来获取设备令牌.
-(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self.window addSubview:viewController.view];
[self.window makeKeyAndVisible];
NSLog(@"Registering for push notifications...");
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
return YES;
}
-(void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
NSString *str = [NSString stringWithFormat:@"Device Token=%@",deviceToken];
NSLog(@"This is device token%@", deviceToken);
}
-(void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err
{
NSString *str = [NSString stringWithFormat: @"Error: %@", err];
NSLog(@"Error %@",err);
}
Run Code Online (Sandbox Code Playgroud) 在安装应用程序并在任何类型的方案中注册通知后,是否有可能更改设备令牌.
场景如:
我能够在下面的方法中获取deviceToken,现在我想知道如何为push通知注册deviceToken,因为我不确定在获取设备令牌之后使用哪个方法或API来注册推送通知的设备令牌以及此注册过程如何运作?
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
NSLog(@"APN device token: %@", deviceToken);
}
Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,对于第一次推送通知注册,我didRegisterForRemoteNotificationsWithDeviceToken在持久性中调用并保存设备令牌,以及更新设备令牌的服务器列表.之后如果有人从iPhone设置中关闭推送通知设置,我如何从我的应用程序中确定它,以便我也可以从服务器中删除设备令牌.我知道APNS提供了一个反馈列表,但除此之外是否有办法以编程方式在App中确定它?谢谢你的帮助!
所以我想通过Urban Airship定位一个特定的设备令牌,但无论我做什么,我的所有设备都会收到针对特定设备令牌的消息.
这是我的PHP代码 - 任何帮助都像往常一样非常感谢!
define('APPKEY','XXXXXXXXXXXXXX');
define('PUSHSECRET', 'XXXXXXXXXXXXX '); // Master Secret
define('PUSHURL', 'https://go.urbanairship.com/api/push/broadcast/');
$msg = "This is a message intended for my iPad 3";
$devicetokens = array();
$devicetokens[0] = $devicetoken;
$contents = array();
$contents['badge'] = "1";
$contents['alert'] = $msg;
$contents['sound'] = "default";
$push = array("aps" => $contents, "device_tokens" =>$devicetokens);
//var_dump($push);
$json = json_encode($push);
$session = curl_init(PUSHURL);
curl_setopt($session, CURLOPT_USERPWD, APPKEY . ':' . PUSHSECRET);
curl_setopt($session, CURLOPT_POST, True);
curl_setopt($session, CURLOPT_POSTFIELDS, $json);
curl_setopt($session, CURLOPT_HEADER, False);
curl_setopt($session, CURLOPT_RETURNTRANSFER, True);
curl_setopt($session, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
$content …Run Code Online (Sandbox Code Playgroud) 下午好.我是巴西人,请原谅我有任何英文错误!
我正在向我自己的设备发送推送通知.我可以在我的设备中获取AppDelegate.m:
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken {
NSLog(@"Device Token Global : %@", deviceToken);
}
Run Code Online (Sandbox Code Playgroud)
但我有一个类LoginViewController.m,我在那里执行登录并将POST deviceToken发送到webservice(将其插入到mySQL表中).如何deviceToken在LoginViewController.m类中将其作为字符串?
我正在使用此代码获取设备令牌它在swift 3中工作但不在swift 4中工作请帮我解决它.
if #available(iOS 10.0, *) {
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in
}
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
print(deviceTokenString)
}
devicetoken ×13
ios ×11
iphone ×3
objective-c ×3
swift ×2
android ×1
appdelegate ×1
cocoa-touch ×1
get ×1
ios5 ×1
ios6 ×1
php ×1
push ×1
registration ×1
token ×1
xcode ×1