搞定 iOS 推送 SDK 集成,看这篇文章就够了!

iOS · jack · Created at · Last by line21971 Replied at · 456 hits
434 1549005614

一次偶然的机会,公司的项目要用到推送,我自己本来就很懒,不愿意去弄整套APNS的流程,刚好之前跟朋友聊起过他们的产品中集成了个推的Android推送,说是体验还可以,那这次我就试一下他们的iOS推送。于是抱着试一试的心态,我先建个demo,试着去集成一下个推iOS推送SDK,摸索着完成了整个流程,言归正传,直接上硬菜!

如何集成个推iOS SDK

看了个推的官网,发现他们集成的方式有两种,分别是XCode集成和CocoaPods集成。本人比较懒,越简单越好,越轻松越好,毫不犹豫的选择了Cocoapods集成方式,程序猿么,就是要想尽办法的懒,搞起!

CocoaPods集成

1.安装CocoaPods

安装方式简单, Mac 下都自带 ruby,使用 ruby 的 gem 命令即可下载安装:

$ sudo gem install cocoapods
$ pod setup

2.准备Podfile文件

在我们的工程目录下,新建一个名为Podfile的文件,如下格式,将依赖的库名字依次列在文件中即可:

作者这里使用的是标准版本:

target 'GeTuipush' do
    platform :ios, "7.0"
    pod 'GTSDK'
end

target 'NotificationService' do
    platform :ios, "10.0"
    pod 'GTExtensionSDK'
end

3.完成GTSDK导入

在项目根目录中执行如下命令:

$ pod install

执行完成后,项目目录结构如下图所示:

注意:在pod install之前,首先你的工程必须创建好,并且如果Podfile文件里面如果有target:NotificationService,那在pod install之前需要创建好通知扩展的Target。

4.开启推送功能:既然是推送,当然是要开推送功能啦!:

5.后台运行权限设置:看个推的官网上面说是为了更好的支持消息推送,提供更多的推送样式,提高消息到达率,既然这么说了,那就不管三七二十一先开了再说,如下图所示:

6.XCode10建议开启WiFi信息授权:在 Xcode 10.x 以上,找到应用Target设置中的Capabilities -> Access WiFi Information,确认开关已经设为ON状态。如下图所示:

注意:主Target和通知扩展的Target都需要打开

7.代码部分,下来就是我们程序猿最喜欢的部分了,粘贴复制。由于是第一次集成个推SDK的代码,我还是仔细的研究了下。

初始化SDK注册APNs并获取CID

1.为AppDelegate增加回调接口类:

#import <UIKit/UIKit.h>
#import <GTSDK/GeTuiSdk.h>

// iOS10 及以上需导入 UserNotifications.framework
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
#import <UserNotifications/UserNotifications.h>
#endif

@interface AppDelegate : UIResponder <UIApplicationDelegate, GeTuiSdkDelegate, UNUserNotificationCenterDelegate>

@property (strong, nonatomic) UIWindow *window;


@end

2.初始化SDK并注册APNs:

#import "AppDelegate.h"

/// 个推开发者网站中申请App时,注册的AppId、AppKey、AppSecret
#define kGtAppId           @"GVZZTqh7lu6S4VLMacneZ7"
#define kGtAppKey          @"RRYDFjGzO17TJXZfGeTuq3"
#define kGtAppSecret       @"7BXDJ0IgWF6a8M0xCgo4G"

@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    [GeTuiSdk startSdkWithAppId:kGtAppId appKey:kGtAppKey appSecret:kGtAppSecret delegate:self];
    // 注册 APNs
    [self registerRemoteNotification];
    return YES;
}

注册APNs获取DeviceToken:

/** 注册 APNs */
- (void)registerRemoteNotification {

        UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
        center.delegate = self;
        [center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionCarPlay) completionHandler:^(BOOL granted, NSError *_Nullable error) {
            if (!error) {
                NSLog(@"request authorization succeeded!");
            }
        }];

        [[UIApplication sharedApplication] registerForRemoteNotifications];
}

个推demo里面给开发者提供演示代码,根据APP支持的iOS系统不同,进行修改。我们的工程最低支持iOS10。

获取CID信息:

/** SDK启动成功返回cid */
- (void)GeTuiSdkDidRegisterClient:(NSString *)clientId {

    NSLog(@"clientId:%@", clientId);
}

这三个参数kGtAppId、kGtAppKey、kGtAppSecret是干啥用的,这三个参数如何获取?回头又看了下个推的官网才搞明白,正好记录下如何申请者三个参数,跟我应用的bundleID绑定。

如何获取kGtAppId、kGtAppKey、kGtAppSecret

1.创建个推开发者账号

访问个推开发者中心,申请个推账号

2.登记新应用

注意:登记新应用是在应用管理页面而不是消息推送页面。

在登记应用界面填写应用名和应用表示,勾选个推产品,勾选iOS,填写包名和bundleID,如下图所示:

这里我有点疑惑。创建应用的时候想勾选iOS,但是看到默认选择了Android平台,并要填写Android签名,这签名是what,这如何搞?看到跟前有个提示如何获取,点了一下,发现里面有SHA256的签名,抱着试一试的态度,直接copy过来,呦呵,能用哦,心里美滋滋。

提交成功后就可以获取到kGtAppId、kGtAppKey、kGtAppSecret,将三个参数填入我们的工程中,然后运行工程,在GeTuiSdkDidRegisterClient的回调方法中获取到cid了,嗯,看来我们已经成功了一一小部分了,距离成功还要继续加油。

注册DeviceToken并统计APNs通知的点击数

1.向个推服务器注册DeviceToken:

/** 远程通知注册成功委托 */
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    //向个推服务器注册deviceToken 为了方便开发者,建议使用新方法
    NSLog(@"deviceToken:%@",deviceToken);
    [GeTuiSdk registerDeviceTokenData:deviceToken];
}

2.处理APNs通知点击事件:

因为我们的工程最低适配到iOS10,这里我就只添加了iOS10及以后版本的通知点击事件,要是想兼容iOS10以下的,可以在个推的demo中找到。

iOS 10及以后版本,处理APNs通知点击事件

//  iOS 10: 点击通知进入App时触发,在该方法内统计有效用户点击数
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {

    NSLog(@"didReceiveNotification:%@", response.notification.request.content.userInfo);

    // [ GTSdk ]:将收到的APNs信息传给个推统计
    [GeTuiSdk handleRemoteNotification:response.notification.request.content.userInfo];

    completionHandler();
}

3.接受个推通道下发的透传消息:

/** SDK收到透传消息回调 */
- (void)GeTuiSdkDidReceivePayloadData:(NSData *)payloadData andTaskId:(NSString *)taskId andMsgId:(NSString *)msgId andOffLine:(BOOL)offLine fromGtAppId:(NSString *)appId {
    //收到个推消息
    NSString *payloadMsg = nil;
    if (payloadData) {
        payloadMsg = [[NSString alloc] initWithBytes:payloadData.bytes length:payloadData.length encoding:NSUTF8StringEncoding];
    }

    NSString *msg = [NSString stringWithFormat:@"taskId=%@,messageId:%@,payloadMsg:%@%@",taskId,msgId, payloadMsg,offLine ? @"<离线消息>" : @""];
    NSLog(@"\n>>>[GexinSdk ReceivePayload]:%@\n\n", msg);
}

获取到了透传消息,但是当应用在后台或者应用杀死的情况下,我们如何获取到APNs消息,这里我们就需要在个推平台用到推送证书,如何获取推送证书?因为本人也是第一次搞推送这书,而且也踩了不少的坑,为了下次不再踩同样的坑,所以在这里就对如何制作推送证书进行了一次规整。

如何制作推送证书?

1.进入苹果开发者中心,选择证书选项,如下图所示:

2.创建推送证书之前必须创建一个APPID,因为推送证书是和APPID绑定在一起的,如下图所示:

在下面的App Services中选择允许推送(Push Notifications),如下图所示:

3.APPID创建好了之后,这个时候需要去创建推送证书,而且还要根据需要的环境选择对应的推送证书,包括开发环境推送证书和生产环境推送证书,然后还要跟刚才创建好的APPID相关联,如下图所示:

这个时候需要上传CSR文件,我们回到桌面,打开钥匙串,从颁发机构申请证书并保存到本地磁盘,如下图所示:

这样CSR文件就创建好了,我们回到苹果开发者中心,继续创建我们的推送证书,选择保存到本地的CSR文件,如下图所示:

这样,我们的推送证书就创建完成了,在本地下载中找到下载的推送证书并双击添加到钥匙串中,然后打开钥匙串找到创建好的推送证书,右键导出P12证书,并输入证书密码,如下图所示:

4.打开我们的个推开发者中心,在个推·消息推送-应用列表-应用配置”中上传正确的APNs证书,如下图所示:

接下来最重要的时刻来了,那就是测试了,看看我们的推送能不能成功。

推送测试

本人是在个推平台上面进行推送测试的,在应用列表里面点击之前创建的应用上的创建推送按钮,如下图所示:

进入后,我有点懵逼,因为之前没有了解过个推SDK的逻辑,在询问了个推技术支持后,技术支持告诉我怎么在个推平台上面去推,也是自己太粗心了,人家进去第一句话就写的很清楚,推送通知目前仅支持安卓用户,iOS请使用透传消息。尴尬!那就透传消息页面试试推。如下图所示:

透传消息测试:

APNs消息测试

NICE啊,这下应用在前台、应用在后台和应用被杀死的情况下都可以收到推送消息了,爽歪歪啊!看来我们已经成功看了百分之九十了!

Notification Service Extension

正在沾沾自喜的时候,突然发现个推的官网上面还有多媒体推送,我靠,还有这种操作,好奇心的趋势下,让我重新审视如何去做多媒体推送。因为我们之前已经把通知扩展的target创建好了,所以,直接上代码。

1.Notification Service Extension 添加成功后会在项目中自动生成 NotificationService.h 和 NotificationService.m 两个类,包含以下两个方法:

- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent *_Nonnull))contentHandler {
    self.contentHandler = contentHandler;
    self.bestAttemptContent = [request.content mutableCopy];

    // [ 测试代码 ] TODO:用户可以在这里处理通知样式的修改,eg:修改标题,开发阶段可以用于判断是否运行通知扩展
    //self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [WillIn]", self.bestAttemptContent.title];

    // [ GTSDK ] 统计APNs到达情况和多媒体推送支持接口, 建议使用该接口
    [GeTuiExtSdk handelNotificationServiceRequest:request withAttachmentsComplete:^(NSArray *attachments, NSArray *errors) {

        // self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [Success]", self.bestAttemptContent.title];

        self.bestAttemptContent.attachments = attachments;      // 设置通知中的多媒体附件
        self.contentHandler(self.bestAttemptContent);           
    }];
}

我们可以在这个方法中处理我们的 APNs 通知,并个性化展示给用户。APNs 推送的消息送达时会调用这个方法,此时你可以对推送的内容进行处理,然后使用contentHandler方法结束这次处理。但是如果处理时间过长,将会进入serviceExtensionTimeWillExpire方法进行最后的紧急处理。

- (void)serviceExtensionTimeWillExpire {
 // [ GTSDK ] 销毁SDK,释放资源
    [GeTuiExtSdk destory];

    //self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [Timeout]", self.bestAttemptContent.title];

    self.contentHandler(self.bestAttemptContent);
}

如果didReceiveNotificationRequest方法在限定时间内没有调用 contentHandler方法结束处理,则会在过期之前进行回调本方法。此时你可以对你的 APNs 消息进行紧急处理后展示,如果没有处理,则显示原始 APNs 推送。

接下来就是测试我们的多媒体推送是否成功,我在网上找了个小狗的照片,直接在个推平台上面推。

多媒体测试

6啊,终于搞定了!棒棒哒~~~

但是,之前的一个老项目说也要集成推送,我透,老项目要用XCode集成,这对于我这种懒人来说,简直是一种折磨啊,哎,折磨归折磨,该搞还要搞。但是之前已经用CocoaPods搞过一遍,这次用XCode集成还不是手到擒来。但是为了防止出错,本人还是先做了个demo,这样后面在自己项目上面集成的话把握性会更大,踩的坑也就会更少。

XCode集成

1.导入个推SDK:

2.库引用检查:

3.添加系统依赖库:

libc++.tbd
libz.tbd
libsqlite3.tbd
libresolv.tbd
Security.framework
MobileCoreServices.framework
SystemConfiguration.framework
CoreTelephony.framework
AVFoundation.framework
CoreLocation.framework
UserNotifications.framework (iOS 10 及以上需添加,使用 Optional 方式接入)
AdSupport.framework (如果使用无IDFA版本SDK,则需删除该 AdSupport 库)

幸亏后面的步骤基本上都是一样的,唯一的欣慰呀!

4.开启推送功能、后台运行权限设置、开启WiFi信息授权

这里跟上面步骤一样,就不啰嗦了。

5.copy代码,这是我们程序猿最喜欢的啦,哈哈哈,之前搞过,这里就不累赘了。

6.添加Notification Service Extension

(1).打开XCode,菜单中选择File->New->Target->Notification Service Extension。如下图所示:

注意:1.Extension的Bundle Identifier不能和Main Target(也就是自己的App Target)的Bundle Identifier相同,否则会报BundleID重复的错误。2.Extension 的 Bundle Identifier 需要在 Main Target 的命名空间下,比如说 Main Target 的 BundleID 为 ent.getui.xxx,那么Extension的BundleID应该类似与ent.getui.xxx.yyy这样的格式。如果不这么做,会引起命名错误。

这个是在个推官网上面看到的,之前自己也踩了这个坑,这里就记录下来。

添加 Notification Service Extension 后会生成相应的 Target。点Finish按钮后会弹出是否激活该 Target 对应 scheme 的选项框,选择 Activate,如果没有弹出该选项框,需要自行添加相应的 scheme。如下图所示:

(2).Notification Service Extension 添加成功后会在项目中自动生成 NotificationService.h 和 NotificationService.m 两个类

这里跟上面一样,就不累赘了。

(3).添加GtExtensionSdk依赖库

选择Notification Service Extension所对应的Target,添加如下依赖库:

libz.tbd
libsqlite3.tbd
GTExtensionSDK.framework
UserNotifications.framework

(4).XCode10建议开启WiFi信息授权:在 Xcode 10.x 以上,找到应用Target设置中的Capabilities -> Access WiFi Information,确认开关已经设为ON状态。如下图所示:

(5).开启多媒体地址Http访问支持:

集成过程中遇到的问题

无效的deviceToken

最让我印象深刻的就是无效的deviceToken,在测试APNS推送的时候,询问过个推那边的技术支持,他们说可以先在应用配置里面测试一下,然后我就拿着我的deviceToken去测试一下,结果提示我是无效的deviceToken,我晕,然后继续咨询个推的技术支持,他们说这个原因有可能是我证书环境的问题。经过一番仔细的检查之后,发现,我在个推平台上面上传的是通用证书,然后我XCode上面的授权证书是开发环境下,这样一来,拿到的是开发环境下的deviceToken,用测试一下,当然会出错。
解决的方案有两种:第一,在个推开发平台上传开发环境下的推送证书。第二:将自己的授权证书更换为生产环境。

通知扩展里面修改标题的代码不生效

self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [Success]", self.bestAttemptContent.title];

发现demo里面有这么一行代码,我把这行代码打开后,推送一条消息,发现标题没有变化,我惊呆了!询问个推技术支持,个推技术支持说,让我先运行主target,然后再运行通知扩展,运行通知扩展的时候会让我们去找主targetAPP,选择主target,然后再推送就会有了,嗯,想了下,这个应该是XCode的bug。

结语

最后,我要说,消息推送功能的集成对APP而言真的真的很重要。以上是个推iOS推送SDK集成的全步骤,给大家做个参考。特别需要注意的几点是:

1.在个推平台上上传的推送证书一定要正确并且要和自己的环境相对应,推荐上传P8证书;

2.主target和通知扩展target是两个target,命名和bundleID上要注意,本人是按照个推官网给的建议命名的。

原文链接:
作者:Ezreallp
链接:https://www.jianshu.com/p/cce2200c0ed7

共收到 6 条回复
1Floor Deleted
2Floor Deleted
3Floor Deleted
4Floor Deleted
5Floor Deleted
8076 1574092471
line21971 · #6 ·

新 竹 叫小 姐 外 約 旅 館 叫 小 姐 L I N E : 21971 攝 護 舒 壓 腺 排 毒 舒 壓 叫 小 姐 新 竹 淋 巴 排 毒 新 竹 外 叫 新 竹 援 交 新 竹 外 約 新 竹 小 吃 新 竹 傳 播 妹 賴 : 21971新 竹 伴 遊 新 竹 竹 北 新 竹 妹 新 竹 找 女 人 新 竹 喝 茶 找 正 妹 新 竹 秘 密 花 園 汽 車 旅 館 叫 小 姐 新 竹 鐘 點 情 人 新 竹 夜 店 一 夜 情 外 約 打 炮 賴 21971 新 竹 全 套 外約新 竹 魚 訊 新 竹 茶 訊 新 竹 援 交 妹 新 竹 全 套 半 套 店 新 竹 學 生 兼 差 賴 :21971 竹 傳 播 全 套 新 竹 飯 店 酒 店 叫 小 姐 小 妖 精 外 送 茶 來 賴21971極 品 金 絲 貓 A V女 優 小 蘿 莉 最 新 妹 妹 名 單 清 純 氣 質 嫵 媚 巨 乳 遊 戲 女 王 兼 職 床 上 功 夫 超 級 贊 的 喲 +賴 21971 粉 嫩 蜜 穴 小 隻 馬 被 插 叫 聲 很 淫 蕩 哦 性 感 一 日 套 房 一 夜 情 人 廬 山 溫 泉 民 宿茶 工 坊 L I N E :21971
新竹叫小姐外約旅館叫小姐LINE:21971攝護舒壓腺排LINE:21971新竹伴遊新竹竹北新竹妹新竹找女人新竹喝茶LINE:21971找正妹新竹秘密花園汽車旅館叫小姐賴21971新竹鐘點情人新竹夜店一夜情外約打炮新竹全套外約新竹魚訊新竹茶訊新竹援交妹新竹全套半套店新竹學生兼差LINE:21971竹傳播全套新竹飯店酒店叫小姐小妖精外送茶LINE:21971極品金絲貓AV女優小蘿莉最新妹妹名單清純氣質嫵媚巨乳遊戲女王兼職床上功夫超級贊的喲+LINE:219714粉嫩蜜穴小隻馬被插叫聲很淫蕩哦性感一日套房一夜情人廬山溫泉民宿茶工坊LINE:21971度假計劃叫小姐愛愛一杯好茶就是你我故事的開始台北桃園龜山新北樹林新竹竹北桃園中壢雲林台中彰化南投草屯..高雄台南.會員獨享附照專區新竹外送茶新竹一夜情,新竹出差找服務,新竹外約,全套服務竹北叫小姐LINE:21971新竹旅館叫小姐.東區一夜情.新竹茶訊,新竹叫小姐新竹東區打炮LINE:21971竹北叫小姐.竹北外約.竹北茶訊.香山叫小姐竹北叫小姐新竹援交妹新竹全套半套店新竹學生兼差賴:21971新竹傳播全套新竹飯店酒店叫小姐外送茶喝賴21971茶討論區新店正妹介紹板橋旅館飯店找女人賴21971按摩叫小姐3P服務五穀泰山區約妹賴:21971找小姐開房三重薇城旅館外送叫小姐賓士MBW跑車論壇外約服務新莊挪威森林旅館飯店叫小姐/新北市外送motel38名台灣女星賣淫名單大曝光!Line21971新店外叫小姐士林外送茶賴21971土城簡愛汽車旅館叫小姐/林口約正妹淡水愛愛茶三重找茶/台北汐止酒店叫小姐台北找魚論壇找女人網外送服務台北約高檔茶/淡水小妖精外+賴:21971外送到府現金消費流言傳來傳去爆陪睡賣淫的女星line:21971還有她們十個| 娛樂|土城旅館飯店叫小姐/找茶網林口住家叫小姐/台北外約愛愛/新店討論區出差叫小姐/新莊找女人賴21971開房間外送配宅找茶訊外叫小姐出差白紀亞外送茶莊歡迎大家來體驗好茶就在小妖精外賴:21971大台北應召站~台北全套服務台北新北炮房-妖精誘惑台北外送茶店大台北外送茶西門町萬華區一夜情Line:21971士林區北投區溫泉旅館叫小姐看照約妹台北外送茶照片台北外送茶電話台北送茶台北按摩論壇台北按摩網台北按摩工作室台北叫小姐論壇台北按摩網台北按摩工作室台北叫小姐賴21971找小模嫩網路人氣小模吉澤明步小茨22歲身高165公分~長相甜美身材火辣3年前因網傳20P爆乳美照以「南華高中爆乳正妹~之名爆紅喝茶找正妹新竹秘密花園汽車旅館叫小姐賴21971新竹旅館鐘點情人新竹外約賴21971手機中華電信台灣大哥大iPhone最新款手機發佈最新報價高檔援交妹/我很緊太陽話女王夜店一夜情外約打炮新竹全套外約新竹魚新竹茶訊賴21971妹妹照https://199312o4346095583.wordpress.com/
川籟都會新竹市北區西大路417號 電話:(03)523-4499豪美-中正店 新竹北區中正路107號11嘍 035213333福華大飯店 新竹市北區中正路178號 3 528 2323Wego薇閣精品旅館 新竹市北區中正路137號3 523 8080 168旅館-新竹館 新竹市北區西濱路一段217號3 536 2277新竹福華大飯店 新竹市北區中正路178號 3 528 2323元首經典旅館 新竹市東區軍功里建功一路28號1樓 3 571 1111約客汽車旅館 新竹市北區東大路四段121號 3 536 1122向日葵汽車旅館新竹市北區經國路二段150號 3 535 9797
馬德里經典旅館 新竹市香山區中華路四段729號3 523 8080箱根 新竹市香山區牛埔東路359號 3 530 9966采舍汽旅 新竹北市中山路116號 電話:036566677花漾時尚旅館 新竹縣竹北市新泰路102號 電話035516490老爺商務旅館 新竹市光復路2段167號 035711585薇閣旅館新竹市 中正路137號 電話:03-523-8080 長緹精品飯店 新竹市復興路22號07-9682715百老匯 新竹市東大路四段121號03-536-112新竹明星精緻汽車旅館 新竹縣竹北市中華路1432號 (03)551-9678喬蓮大飯店 新竹縣竹北市台元街33號 03-5518171 佳緹 新竹縣竹北市中華路439-1號 03-6560016 長緹花祺飯店 新竹市東區民生路268號 03-5323183晶悅精品旅館 新竹市東區關新二街49號 3 666 7567水蜜桃時尚旅店 新竹市東區民族路29號  (03)523-4138 煙波飯店都會一館 新竹市東區民生路177號3 542 7777紫晶彩繪汽車旅館 新竹市東區東南街53巷10弄18號賓城商務旅館 新竹市東區中正路13號  3 526 9255金燕精緻旅館 新竹市東區民族路13號  3 522 7151水蜜桃時尚旅店 新竹市東區民族路29號3 523 4138 東賓大旅社 新竹市東區林森路14號 03 522 3161 華泰經典旅店 新竹市東區勝利路15號  524 3145風信子生活旅店 新竹市東區民權路223號3 531 3525豪美旅店 新竹市東區勝利路86號 3  521 8441悅豪大飯店 新竹市東區復興路22號 3 526 7890福宏商務旅館 新竹市東區東門街128號 3 528 1818新苑庭園館 竹市東區大同路11號 3 522 6868長緹花祺飯店 新竹市東區民生路268號 03-5323183晶悅精品旅館 新竹市東區關新二街49號 3 666 7567水蜜桃時尚旅店 新竹市東區民族路29號  (03)523-4138 煙波飯店都會一館 新竹市東區民生路177號3 542 7777紫晶彩繪汽車旅館 新竹市東區東南街53巷10弄18號賓城商務旅館 新竹市東區中正路13號  3 526 9255金燕精緻旅館 新竹市東區民族路13號  3 522 7151水蜜桃時尚旅店 新竹市東區民族路29號3 523 4138 東賓大旅社 新竹市東區林森路14號 03 522 3161 華泰經典旅店 新竹市東區勝利路15號  524 3145風信子生活旅店 新竹市東區民權路223號3 531 3525豪美旅店 新竹市東區勝利路86號 3  521 8441悅豪大飯店 新竹市東區復興路22號 3 526 7890福宏商務旅館 新竹市東區東門街128號 3 528 1818新苑庭園館 竹市東區大同路11號 3 522 6868

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up